Codice: Seleziona tutto
execl("/bin/cd","ls", "-l", NULL); /* Esegue ls -l */
Cosa pensi che facciano queste due righe di codice?
raider91 ha scritto:Allora io non riesco a capire perchè non riesce a sostituire il programma cd con ls -l
Non sostituiscono certo il programma cd (o pwd) con ls, bensì il programma
in esecuzione (il tuo!).
mentre se avessi scritto execl("/bin/ls","ls", "-l", NULL); sarebbe andato tutto a buon fine.
Perché è così che va usata la execl: il secondo argomento della execl corrisponderà all'
argv[0] che sarà passato al programma il cui file eseguibile è specificato come primo argomento della execl. Il suo prototipo è equivalente a
Codice: Seleziona tutto
int execl(const char *filename, const char *argv0, const char *argv1);
raider91 ha scritto:Inoltre perchè se scrivo:
quando vado ad eseguire mi compare il messaggio :
Codice: Seleziona tutto
ls: opzione non valida -- "l"
Try 'ls --help' for more information.
Perché in realtà stai eseguendo pwd (il primo argomento), non ls. Da qualche parte nel suo codice, pwd farà qualcosa come:
Codice: Seleziona tutto
printf("%s: opzione non valida -- \"l\"\n", argv[0]);
printf("Try '%s --help' for more information.\n", argv[0]);
dove
argv[0] è quell'
argv0 che hai passato come secondo argomento della execl.