next up previous contents index
Next: Code di messaggi Up: Processi Previous: Impiego di pipe nei   Indice   Indice analitico


Le funzioni della classe "exec"

Le principali chiamate a questa importante classe di funzione sono:

int execl(char *nomeprog, [*arg0,....*argN],0);
int execlp(char *nomeprog, [*arg0,...*argN],0);
int execv(char *nomeprog, *argv[]);
int execvp(char *nomeprog, *argv[]);

Dove si è seguita la convenzione di racchiudere tra parentesi quadre i parametri opzionali. La più importante caratteristica che accomuna tutte le funzioni di questa classe consiste nella sostituzione, al processo attivo in memoria, del codice eseguibile rappresentato dal programma *nomeprog. Per sostituzione si intende che le istruzioni attualmente in memoria con il PID del processo corrente, all'atto della chiamata, vengono rimosse per far luogo all'eseguibile invocato.

Se si volesse, ad esempio, scrivere un programma che lancia un comando di shell, si dovrebbe (ove non si ritenga di usare una chiamatasystem()), fare una fork(), lasciando il processo padre in attesa che il figlio termini; quindi, far eseguire la chiamata execvp() (ad esempio) al figlio. In modo tale che, quando la chiamata al programma esterno ha termine, il padre, che era rimasto in attesa fino a quel momento "riprende la parola", proseguendo nell'elaborazione.

La più importante differenza tra le prime due funzioni qui menzionate

execl()
ed
execlp()
e le altre due
execv(),execvp()
Risiede nel fatto che, mentre nelle prime due il numero di parametri passati alla funzione è univocamente determinato in fase di compilazione, per le altre due questo può cambiare a runtime. Tutte le funzioni sopra, in caso di fallimento ritornano il valore -1 al programma chiamante.


next up previous contents index
Next: Code di messaggi Up: Processi Previous: Impiego di pipe nei   Indice   Indice analitico
blacksheep & 2006-11-22