Chiamata del sistema Exec in C

Chiamata del sistema Exec in C
La famiglia exec ha molte funzioni in c. Queste funzioni C sono sostanzialmente utilizzate per eseguire un comando di sistema in un processo separato che il programma principale e stampano l'output.

In questo articolo, parlo della famiglia di funzioni Exec e ti mostrerò come utilizzare ognuna di queste funzioni della famiglia Exec in C. Quindi iniziamo.

C Funzioni del sistema nella famiglia Exec:

Le famiglie della funzione exec sono definite nell'intestazione unistd.H. Quindi, devi usare questa intestazione sul programma C in cui si desidera utilizzare queste funzioni.

Le funzioni Exec disponibili insieme ai loro parametri di funzione sono riportate di seguito:

  • 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 fanno ciascuna di queste funzioni e come usarle.

Funzione di sistema Execl ():

In Execl () La funzione di sistema prende il percorso del file binario eseguibile (i.e. /bin/ls) come il primo e il secondo argomento. Quindi, gli argomenti (i.e. -lh, /casa) che vuoi passare all'eseguibile seguito da NULLO. Quindi Execl () La funzione di sistema esegue il comando e stampa l'uscita. Se si verifica un errore, allora Execl () restituisce -1. Altrimenti, non restituisce nulla.

Sintassi:

int execl (const char *percorso, const char *arg,…, null);

Di seguito è riportato un esempio della funzione di sistema Execl ():

#includere
int main (void)
char *binarypath = "/bin/ls";
char *arg1 = "-lh";
char *arg2 = "/home";
Execl (BinaryPath, BinaryPath, Arg1, Arg2, Null);
restituzione 0;

Ho corso il ls -lh /casa Comando usando la funzione di sistema Execl (). Come puoi vedere, viene visualizzato il risultato corretto.

Funzione di sistema Execlp ():

Execl () non usa il SENTIERO variabile d'ambiente. Quindi, è necessario il percorso completo del file eseguibile con Execl (). Execlp () utilizza la variabile per il percorso dell'ambiente. Quindi, se nel percorso è disponibile un file o un comando eseguibile, allora il comando o il nome file sono sufficienti per eseguirlo, il percorso completo non è necessario.

Sintassi:

int execlp (const char *file, const char *arg,…, null);

Possiamo riscrivere l'esempio Execl () utilizzando la funzione di sistema Execlp () come segue:

#includere
int main (void)
Char *ProgramName = "LS";
char *arg1 = "-lh";
char *arg2 = "/home";
Execlp (ProgramName, ProgramName, Arg1, Arg2, Null);
restituzione 0;

Ho superato solo il nome di comando ls, Non il percorso completo /bin/ls. Come puoi vedere, ho ottenuto lo stesso output di prima.

Funzione di sistema Execv ():

Nella funzione Execl (), i parametri del file eseguibile vengono passati alla funzione come argomenti diversi. Con Execv (), è possibile passare tutti i parametri in un array null terminato argv. Il primo elemento dell'array dovrebbe essere il percorso del file eseguibile. Altrimenti, la funzione Execv () funziona proprio come Execl ().

Sintassi:

int execv (const char *percorso, char *const argv []);

Possiamo riscrivere l'esempio Execl () come segue:

#includere
int main (void)
char *binarypath = "/bin/ls";
char *args [] = binarypath, "-lh", "/home", null;
Execv (binarypath, args);
restituzione 0;

Come puoi vedere, sto ottenendo l'output corretto.

Funzione di sistema Execvp ():

Funziona allo stesso modo della funzione di sistema Execv (). Ma viene utilizzata la variabile per l'ambiente del percorso. Quindi, il percorso completo del file eseguibile non è richiesto come in Execlp ().

Sintassi:

int execvp (const char *file, char *const argv []);

Possiamo riscrivere l'esempio Execv () come segue:

#includere
int main (void)
Char *ProgramName = "LS";
char *args [] = ProgramName, "-lh", "/home", null;
ExecVP (ProgramName, Args);
restituzione 0;

Come puoi vedere, viene visualizzato l'output corretto.

Funzione di sistema Execle ():

Funziona proprio come Execl () ma puoi fornire le tue variabili di ambiente insieme ad esso. Le variabili di ambiente vengono passate come un array envp. L'ultimo elemento del envp L'array dovrebbe essere nullo. Tutti gli altri elementi contengono le coppie di valore chiave come stringa.

Sintassi:

int execle (const char *percorso, const char *arg,…, null, char *const envp []);

Di seguito è riportato un esempio della funzione di sistema Execle ():

#includere
int main (void)
char *binarypath = "/bin/bash";
char *arg1 = "-c";
char *arg2 = "echo" visita $ hostname: $ port dal tuo browser."";
char *const env [] = "hostname = www.Linuxhint.com "," port = 8080 ", null;
Execle (BinaryPath, BinaryPath, Arg1, Arg2, Null, Env);
restituzione 0;

Ho superato due variabili di ambiente NOME HOST E PORTA alla funzione Execle (). Come puoi vedere, posso accedervi dall'eseguibile /Bin/Bash.

Funzione di sistema Execve ():

Proprio come Execle () puoi fornire le tue variabili di ambiente insieme a Execve (). Puoi anche passare gli argomenti come array come hai fatto in Execv ().

Sintassi:

int execve (const char *file, char *const argv [], char *const envp []);

L'esempio Execle () può essere riscritto come segue:

#includere
int main (void)
char *binarypath = "/bin/bash";
char *const args [] = binarypath, "-c", "echo" visita $ host: $ port
dal tuo browser."", NULLO;
char *const env [] = "hostname = www.Linuxhint.com "," port = 8080 ", null;
Execve (BinaryPath, Args, Env);
restituzione 0;

Come puoi vedere, otteniamo lo stesso output dell'esempio Execle ().

Quindi, è così che usi la famiglia della funzione Exec in C per la programmazione del sistema in Linux. Grazie per aver letto questo articolo.