In questo articolo parlerò della famiglia di funzioni exec e ti mostrerò come utilizzare ognuna di queste funzioni della famiglia exec in C. Quindi, iniziamo.
Funzioni di sistema C nella famiglia Exec:
Le famiglie di funzioni exec sono definite nell'intestazione unistd.h . Quindi, è necessario utilizzare questa intestazione nel programma C in cui si desidera utilizzare queste funzioni.
Di seguito sono riportate le funzioni exec disponibili insieme ai relativi parametri di funzione:
- int execl(const char *percorso, const char *arg, …, NULL);
- int execlp(const char *file, const char *arg, …, NULL );
- int execv(const char *percorso, char *const argv[]);
- int execvp(const char *file, char *const argv[]);
- int execle(const char *percorso, const char *arg, …, NULL, char * const envp[] );
- int execve(const char *file, char *const argv[], char *const envp[]);
Vediamo cosa fa ciascuna di queste funzioni e come usarle.
execl() Funzione di sistema:
In execl() la funzione di sistema prende il percorso del file binario eseguibile (es. / bin / ls ) come primo e secondo argomento. Quindi, gli argomenti (es. -lh , /casa ) che vuoi passare all'eseguibile seguito da NULLO . Quindi la funzione di sistema execl() esegue il comando e stampa l'output. Se si verifica un errore, execl() restituisce -1. In caso contrario, non restituisce nulla.
Sintassi:
inteccellente(cost char *il percorso, cost char *arrabbiato,...,NULLO);Di seguito è riportato un esempio della funzione di sistema execl():
#includere
intprincipale(vuoto) {
char *binarioPath= '/bin / ls';
char *arg1= '-sinistra';
char *arg2= '/casa';
eccellente(binarioPath,binarioPath,arg1,arg2,NULLO);
Restituzione 0;
}
ho eseguito il ls -lh / home comando utilizzando la funzione di sistema execl(). Come puoi vedere, viene visualizzato il risultato corretto.
execlp() Funzione di sistema:
execl() non usa il IL PERCORSO variabile d'ambiente. Quindi, è necessario il percorso completo del file eseguibile per eseguirlo con execl(). execlp() utilizza la variabile d'ambiente PATH. Quindi, se un file eseguibile o un comando è disponibile nel PERCORSO, il comando o il nome del file è sufficiente per eseguirlo, il percorso completo non è necessario.
Sintassi:
intexeclp(cost char *file, cost char *arrabbiato,...,NULLO);Possiamo riscrivere l'esempio execl() usando la funzione di sistema execlp() come segue:
#includereintprincipale(vuoto) {
char *nome del programma= 'l';
char *arg1= '-sinistra';
char *arg2= '/casa';
execlp(nome del programma,nome del programma,arg1,arg2,NULLO);
Restituzione 0;
}
Ho passato solo il nome del comando ls , non il percorso completo / bin / ls . Come puoi vedere, ho ottenuto lo stesso risultato di prima.
execv() Funzione di sistema:
Nella funzione execl(), i parametri del file eseguibile vengono passati alla funzione come argomenti diversi. Con execv(), puoi passare tutti i parametri in un array terminato con NULL argv . Il primo elemento dell'array dovrebbe essere il percorso del file eseguibile. Altrimenti, la funzione execv() funziona proprio come la funzione execl().
Sintassi:
intexecv(cost char *il percorso, char *costargv[]);Possiamo riscrivere l'esempio execl() come segue:
#includereintprincipale(vuoto) {
char *binarioPath= '/bin / ls';
char *argomenti[] = {binarioPath, '-sinistra', '/casa',NULLO};
execv(binarioPath,argomenti);
Restituzione 0;
}
Come puoi vedere, sto ottenendo l'output corretto.
execvp() Funzione di sistema:
Funziona allo stesso modo della funzione di sistema execv(). Ma viene utilizzata la variabile d'ambiente PATH. Quindi, il percorso completo del file eseguibile non è richiesto proprio come in execlp().
Sintassi:
intexecvp(cost char *file, char *costargv[]);Possiamo riscrivere l'esempio execv() come segue:
#includereintprincipale(vuoto) {
char *nome del programma= 'l';
char *argomenti[] = {nome del programma, '-sinistra', '/casa',NULLO};
execvp(nome del programma,argomenti);
Restituzione 0;
}
Come puoi vedere, viene visualizzato l'output corretto.
execle() Funzione di sistema:
Funziona proprio come execl() ma puoi fornire le tue variabili di ambiente insieme ad esso. Le variabili d'ambiente vengono passate come un array ambiente . L'ultimo elemento della ambiente l'array dovrebbe essere NULL. Tutti gli altri elementi contengono le coppie chiave-valore come stringa.
Sintassi:
intexecle(cost char *il percorso, cost char *arrabbiato,...,NULLO, char * costambiente[] );Di seguito è riportato un esempio della funzione di sistema execle():
#includereintprincipale(vuoto) {
char *binarioPath= '/bin/bash';
char *arg1= '-C';
char *arg2= 'buttato fuori'Visita $HOSTNAME:$PORT dal tuo browser.'';
char *costenv[] = {'HOSTNAME=www.linuxhint.com', 'PORTA=8080',NULLO};
execle(binarioPath,binarioPath,arg1,arg2,NULLO,env);
Restituzione 0;
}
Ho passato due variabili d'ambiente NOME HOST e PORTA alla funzione execle(). Come puoi vedere, posso accedervi dall'eseguibile /bin/bash .
execve() Funzione di sistema:
Proprio come execle() puoi fornire le tue variabili di ambiente insieme a execve(). Puoi anche passare argomenti come array come hai fatto in execv().
Sintassi:
intesecutivo(cost char *file, char *costargv[], char *costambiente[]);L'esempio execle() può essere riscritto come segue:
#includereintprincipale(vuoto) {
char *binarioPath= '/bin/bash';
char *costargomenti[] = {binarioPath, '-C', 'buttato fuori'Visita $HOSTNAME:$PORT
dal tuo browser.'',NULLO};
char *costenv[] = {'HOSTNAME=www.linuxhint.com', 'PORTA=8080',NULLO};
esecutivo(binarioPath,argomenti,env);
Restituzione 0;
}
Come puoi vedere, otteniamo lo stesso output dell'esempio execle().
Quindi, è così che usi la famiglia di funzioni exec in C per la programmazione di sistema in Linux. Grazie per aver letto questo articolo.