I denne artikel vil jeg tale om exec-familien af funktioner og vise dig, hvordan du bruger hver af disse exec-familiefunktioner i C. Så lad os komme i gang.
C Systemfunktioner i Exec-familien:
Familierne til exec-funktion defineres i overskriften unistd.h. Så du skal bruge denne overskrift på C-programmet, hvor du vil bruge disse funktioner.
De tilgængelige exec-funktioner sammen med deres funktionsparametre er angivet nedenfor:
- int execl (const char * sti, const char * arg,…, NULL);
- int execlp (const char * fil, const char * arg,…, NULL);
- int execv (const char * sti, char * const argv []);
- int execvp (const char * fil, char * const argv []);
- int execle (const char * path, const char * arg,…, NULL, char * const envp []);
- int udføre (const char * fil, char * const argv [], char * const envp []);
Lad os se, hvad hver af disse funktioner gør, og hvordan man bruger dem.
execl () Systemfunktion:
I execl () tager systemfunktionen stien til den eksekverbare binære fil (i.e. / bin / ls) som det første og andet argument. Derefter argumenterne (i.e. -lh, /hjem) som du vil overføre til den eksekverbare efterfulgt af NUL. Derefter kører execl () systemfunktionen kommandoen og udskriver output. Hvis der opstår en fejl, returnerer execl () -1. Ellers returnerer det intet.
Syntaks:
int execl (const char * sti, const char * arg,…, NULL);Et eksempel på systemfunktionen execl () gives nedenfor:
#omfatteint main (ugyldigt)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ hjem";
execl (binaryPath, binaryPath, arg1, arg2, NULL);
returnere 0;
Jeg kørte ls -lh / hjem kommando ved hjælp af execl () systemfunktion. Som du kan se, vises det korrekte resultat.
execlp () Systemfunktion:
execl () bruger ikke STI miljøvariabel. Så den fulde sti til den eksekverbare fil kræves for at køre den med execl (). execlp () bruger PATH-miljøvariablen. Så hvis en eksekverbar fil eller kommando er tilgængelig i PATH, er kommandoen eller filnavnet nok til at køre den, den fulde sti er ikke nødvendig.
Syntaks:
int execlp (const char * fil, const char * arg,…, NULL);Vi kan omskrive execl () eksemplet ved hjælp af execlp () systemfunktionen som følger:
#omfatteint main (ugyldigt)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ hjem";
execlp (programnavn, programnavn, arg1, arg2, NULL);
returnere 0;
Jeg har kun bestået kommandonavnet ls, ikke hele vejen / bin / ls. Som du kan se, fik jeg den samme output som før.
execv () Systemfunktion:
I execl () - funktionen overføres parametrene for den eksekverbare fil til funktionen som forskellige argumenter. Med execv () kan du videregive alle parametrene i et NULL-afsluttet array argv. Det første element i arrayet skal være stien til den eksekverbare fil. Ellers fungerer execv () -funktionen ligesom execl () -funktionen.
Syntaks:
int execv (const char * sti, char * const argv []);Vi kan omskrive execl () eksemplet som følger:
#omfatteint main (ugyldigt)
char * binaryPath = "/ bin / ls";
char * args [] = binaryPath, "-lh", "/ home", NULL;
execv (binaryPath, args);
returnere 0;
Som du kan se, får jeg den korrekte output.
execvp () Systemfunktion:
Fungerer på samme måde som execv () systemfunktion. Men PATH-miljøvariablen bruges. Så den fulde sti til den eksekverbare fil er ikke påkrævet ligesom i execlp ().
Syntaks:
int execvp (const char * fil, char * const argv []);Vi kan omskrive execv () -eksemplet som følger:
#omfatteint main (ugyldigt)
char * programName = "ls";
char * args [] = programnavn, "-lh", "/ home", NULL;
execvp (programnavn, args);
returnere 0;
Som du kan se, vises den korrekte output.
execle () Systemfunktion:
Fungerer ligesom execl (), men du kan give dine egne miljøvariabler sammen med det. Miljøvariablerne sendes som en matrix envp. Det sidste element i envp array skal være NULL. Alle de andre elementer indeholder nøgleværdiparene som streng.
Syntaks:
int execle (const char * path, const char * arg,…, NULL, char * const envp []);Et eksempel på execle () systemfunktionen gives nedenfor:
#omfatteint main (ugyldigt)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" Besøg $ HOSTNAME: $ PORT fra din browser."";
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
execle (binaryPath, binaryPath, arg1, arg2, NULL, env);
returnere 0;
Jeg bestod to miljøvariabler VÆRTSNAVN og HAVN til execle () -funktionen. Som du kan se, kan jeg få adgang til dem fra den eksekverbare / bin / bash.
execve () Systemfunktion:
Ligesom execle () kan du give dine egne miljøvariabler sammen med execve (). Du kan også videregive argumenter som arrays, som du gjorde i execv ().
Syntaks:
int udføre (const char * fil, char * const argv [], char * const envp []);Eksemplet på execle () kan omskrives som følger:
#omfatteint main (ugyldigt)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Besøg $ HOSTNAME: $ PORT
fra din browser."", NUL;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
udføre (binaryPath, args, env);
returnere 0;
Som du kan se, får vi den samme output som i eksemplet execle ().
Så det er sådan, du bruger exec-funktionsfamilien i C til systemprogrammering i Linux. Tak, fordi du læste denne artikel.