PDA

Visualizza versione completa : [C] funzione system() con stringa variabile


UG0_BOSS
22-05-2007, 20.56.47
Ave forum :)

Abitualmente utilizzo la funzione system() per eseguire comandi esterni ai miei programmi, che perņ accetta come argomento solo una stringa di const char.

Adesso dato che lavoro su un file temporaneo di cui conosco il nome solo al momento dell'esecuzione mi tornerebbe utile una funzione simile che abbia come paramentro non un const char ma una stringa che possa essere variabile, in modo da poter dare il comando sul file su cui sto lavorando.

In caso non fossi stato chiaro mi spiego meglio:
Ho un file il cui nome č memorizzato nella variabile filename.
Dopo aver scritto in filename una serie di comandi, devo renderlo eseguibile (chmod a+x filename) e poi eseguire lo script (./filename).

C'č una funzione che mi permetta di eseguire il comando contenuto, per esempio, in una stringa variabile?

char comando[16]="chmod a+x TMP001";
funzione(comando);

SkAkKo
22-05-2007, 21.47.56
puoi usare la funzione
execvp(char *file_name,char **argv)

filename č il nome del file e argv sono i paramentri da passare..
attenzione perņ..se la chiamata a execvp ha successo viene eseguito il comando e l esecuzione non torna all istruzione successiva ma finisce con il comando stesso ...

se devi fare altre cose puoi fare

pid = fork();
if (pid ==0) execvp(...); /*processo figlio*/
else ( wait(&status) /*processo padre prima di continuare aspetto che termini il processo figlio*/


puoi anche usare execlp(char* filename,char *arg[0],char *arg1[n],...,0)..cambia soltanto come passare i parametri..nel tuo caso

execlp("chmod","chmod","a+x",filename,0);

UG0_BOSS
23-05-2007, 17.48.00
puoi anche usare execlp(char* filename,char *arg[0],char *arg1[n],...,0)..cambia soltanto come passare i parametri..nel tuo caso

execlp("chmod","chmod","a+x",filename,0);

Perfetto... esattamente quello che cercavo. Grazie mille :)