Domanda

Sto usando execv() per eseguire comandi da / bin / come il programma 'ls', 'pwd', 'eco' dal mio c ++, e mi chiedo che valore devo fornire in argv [0];

const char * path = getPath();
char ** argv = getArgs();

execv(path,argv);
È stato utile?

Soluzione

argv[0] dovrebbe essere il nome del programma. E 'passato alla funzione main del programma. Alcuni programmi di differenziare il loro comportamento a seconda di ciò stringa argv[0] è. Ad esempio il guscio bash GNU disabiliterà alcune delle sue caratteristiche se richiamate utilizzando sh anziché bash. Miglior dargli lo stesso valore che si passa a path.

In Linux, argv[0] è il nome del processo visualizzato dall'utilità top (che probabilmente si ottiene dalla lettura di voci in /proc/)

Altri suggerimenti

argv [0] dovrebbe essere il percorso completo del comando che si desidera eseguire.

So che questa non è la risposta che state cercando, ma c'è un motivo specifico per cui si sta facendo questo? Il motivo che mi chiedo è che la maggior parte se non tutte le azioni gente normalmente eseguiti sia con system() o execv() sono disponibili nelle librerie su Windows o Unix e sono più sicuri, più veloci e meno probabilità di soffrire di circostanziali errori . Con questo voglio dire, per esempio, quando i cambiamenti PATH e improvvisamente il vostro codice smette di funzionare.

Se siete di passaggio in una stringa, in tutto o in parte, e in esecuzione allora si lascia anche aprirvi ad un utente l'accesso al sistema digitando un comando che potrebbe essere dannoso. Per esempio. Immaginate di aver implementato una ricerca di file utilizzando find /home -name e i tipi di utente in:

"%" -exec rm {} \;

Ouch!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top