PDA

View Full Version : [C unix] problema exec


stella_650
17-06-2008, 11:24
ciao a tutti..Ho realizzato un piccolo programma in C unix per sperimentare il funzionamento delle funzioni exec.
CI sono 3 che vanno in errore...in particolare, la execlpe, la execle,la execvpe.
Inizialmente credevo fosse un problema di settaggio scorretto della variabile di ambiente...ma poi la execve mi va...per cui sarà un qualcosa di diverso...

Riporto il codice..sperando in un vostro aiuto

#include <unistd.h>
#include <stdio.h>
int main(void)
{
int scelta;
//Prova delle funzioni exec...tutte eseguono ls
char *env[]={"USER=user","PATH=/home/user/Lab_so/EserciziRiepilogo/",(char*)0};
char *argv[]={"ls","-l",(char*)0};
printf("Scegliere una opzione per le funzioni exec\n");
printf("1) per eseguire il comando ls con la funzione execl\n");
printf("2) per eseguire il comando ls con la funzione execle\n");
printf("3) per eseguire il comando ls con la funzione execlp\n");
printf("4) per eseguire il comando ls con la funzione execlpe\n");
printf("5) per eseguire il comando ls con la funzione execv\n");
printf("6) per eseguire il comando ls con la funzione execve\n");
printf("7) per eseguire il comando ls con la funzione execvp\n");
printf("8) per eseguire il comando ls con la funzione execvpe\n");
printf("Digitare la scelta\n");
scanf("%d",&scelta);
switch (scelta)
{
case 1: execl("/bin/ls","ls","-l",(char*)0);
break;
case 2: execle("/bin/ls","ls","-l",env);//non funziona
break;
case 3:execlp("ls","ls","-l",(char*)0);
break;
case 4: execlpe("ls","ls","-l",env);//non funziona
break;
case 5: execv("/bin/ls",argv);
break;
case 6: execve("/bin/ls",argv,env);
break;
case 7: execvp("ls",argv);
break;
case 8: execvpe("ls",argv,env);//non funziona
break;

}
}

Grazie

ilsensine
17-06-2008, 12:44
Per motivi differenti.
La execle perché non hai aggiunto un NULL dopo i parametri e prima di env.
La execvpe perché non hai messo /bin nel path.
La execlpe per entrambi i motivi

stella_650
17-06-2008, 13:17
Ho apportato le modifiche cm suggerito ma ottengo sempre questi errori:

/tmp/cc8GoIds.o: In function `main':
funexec.c:(.text+0x18b): undefined reference to `execlpe'
funexec.c:(.text+0x1ed): undefined reference to `execvpe'
collect2: ld returned 1 exit status

Ora la execle funziona ma queste due continuano a dare l'errore...

//case 4: execlpe("/bin/ls","ls","-l",NULL,env);//non funziona
//case 8: execvpe("/bin/ls",argv,env);//non funziona

Stev-O
17-06-2008, 13:24
prova a unire la PATH= all'altro comando e mettici export casomai

ilsensine
17-06-2008, 13:28
Ho apportato le modifiche cm suggerito ma ottengo sempre questi errori:

/tmp/cc8GoIds.o: In function `main':
funexec.c:(.text+0x18b): undefined reference to `execlpe'
funexec.c:(.text+0x1ed): undefined reference to `execvpe'
collect2: ld returned 1 exit status

Non ho detto nulla ma quelle due funzioni non le ho mai sentite nominare, almeno su linux dove in genere lavoro. Accontentati delle execle e execve.

Stev-O
17-06-2008, 13:31
ma usare popen ?