PDA

View Full Version : [C] Lanciare piu comandi [BASH] (+ parametri) con exec..


vv1984
17-01-2008, 10:13
Ciao a tutti, sto provando a lanciare con un programma C una sequenza di comandi BASH utilizzando exec(..) e la funzione strtok() ma ho un problema
di segmentation fault apparentemente irrisolvibile (gia' provato e debuggare in tutti i modi a me conosciuti, ma nulla.. ).
Provo a postarvi il codice, magari salta fuori che sto facendo cio che voglio fare nella maniera piu cretina possibile..

int runall(char *arg, ...)
{
/*Id dei processi*/
int pid;

va_list lista_argomenti;

/*Stringa in cui salvo il conmando da eseguire */
char *comando = NULL;
/*Array di stringhe in cui salvo i vari parametri relativi al comando */
char *parametri[10];

va_start(lista_argomenti, arg);

/*Stampo la stringa arg e non ci sono problemi*/

printf("%s \n",arg);

/*Estraggo il primo token dalla stringa arg, su questo comando il
programma mi restituisce segmentation fault. Sebbene sia gia riuscito
a fare questa operazione su una qualsiasi stringa, e nel comando precedente
mi sono accertato che arg sia una stringa a tutti gli effetti...*/

comando = strtok( arg, " " );

while ( comando != 0 )
{
/*Salvo con un ciclo i parametri nell array "parametri"*/
/*CODICE ANCORA MANCANTE...*/

/*Eseguo comando*/
pid = fork();

if (pid == 0)
{
execlp(comando++, *parametri);
}

comando = va_arg(lista_argomenti, char *);

}

va_end(lista_argomenti);
sleep(1);

}


int main(int argc, char **argv)
{
runall("ls -l","uname -a","ps -aux",(char *) 0);
exit(0);
}