In dit artikel ga ik het hebben over de exec-familie van functies en laat ik u zien hoe u elk van deze exec-familiefuncties in C kunt gebruiken. Dus laten we beginnen.
C Systeemfuncties in de Exec-familie:
De exec-functiefamilies worden gedefinieerd in de header unistd.h. U moet deze header dus gebruiken in het C-programma waar u deze functies wilt gebruiken.
De beschikbare exec-functies samen met hun functieparameters worden hieronder gegeven:
- int execl(const char *path, const char *arg,… , NULL);
- int execlp(const char *file, const char *arg,… , NULL);
- int execv(const char *path, char *const argv[]);
- int execvp(const char *file, char *const argv[]);
- int execle(const char *path, const char *arg,... , NULL, char * const envp[] );
- int execve(const char *file, char *const argv[], char *const envp[]);
Laten we eens kijken wat elk van deze functies doet en hoe ze te gebruiken.
execl() Systeem Functie:
In execl() neemt de systeemfunctie het pad van het uitvoerbare binaire bestand (i.e. /bin/ls) als het eerste en tweede argument. Vervolgens worden de argumenten (i.e. -lh, /huis) die u wilt doorgeven aan het uitvoerbare bestand, gevolgd door NUL. Vervolgens voert de systeemfunctie execl() de opdracht uit en drukt de uitvoer af. Als er een fout optreedt, geeft execl() als resultaat -1. Anders levert het niets op.
Syntaxis:
int execl(const char *path, const char *arg,… , NULL);Een voorbeeld van de systeemfunctie execl() wordt hieronder gegeven:
#includeint main(void)
char *binaryPath = "/bin/ls";
char *arg1 = "-lh";
char *arg2 = "/home";
execl(binaryPath, binaryPath, arg1, arg2, NULL);
retourneer 0;
ik rende de ls -lh /home commando met execl() systeemfunctie. Zoals u kunt zien, wordt het juiste resultaat weergegeven.
execlp() Systeemfunctie:
execl() maakt geen gebruik van de PAD omgevingsvariabele. Het volledige pad van het uitvoerbare bestand is dus vereist om het uit te voeren met execl(). execlp() gebruikt de omgevingsvariabele PATH. Dus als een uitvoerbaar bestand of commando beschikbaar is in het PATH, dan is het commando of de bestandsnaam voldoende om het uit te voeren, het volledige pad is niet nodig.
Syntaxis:
int execlp(const char *file, const char *arg,… , NULL);We kunnen het voorbeeld execl() herschrijven met de systeemfunctie execlp() als volgt:
#includeint main(void)
char *programmanaam = "ls";
char *arg1 = "-lh";
char *arg2 = "/home";
execlp(programmanaam, programmanaam, arg1, arg2, NULL);
retourneer 0;
Ik heb alleen de opdrachtnaam doorgegeven ls, niet het volledige pad /bin/ls. Zoals je kunt zien, heb ik dezelfde output als voorheen.
execv() Systeem Functie:
In de functie execl() worden de parameters van het uitvoerbare bestand als verschillende argumenten aan de functie doorgegeven. Met execv(), kunt u alle parameters in een NULL-beëindigde array doorgeven argv. Het eerste element van de array moet het pad van het uitvoerbare bestand zijn. Anders werkt de functie execv() net als de functie execl().
Syntaxis:
int execv(const char *path, char *const argv[]);We kunnen het voorbeeld execl() als volgt herschrijven:
#includeint main(void)
char *binaryPath = "/bin/ls";
char *args[] = binaryPath, "-lh", "/home", NULL;
execv(binaryPath, args);
retourneer 0;
Zoals je kunt zien, krijg ik de juiste uitvoer.
execvp() Systeem Functie:
Werkt op dezelfde manier als execv() systeemfunctie. Maar de omgevingsvariabele PATH wordt gebruikt. Het volledige pad van het uitvoerbare bestand is dus niet vereist, net als in execlp().
Syntaxis:
int execvp(const char *file, char *const argv[]);We kunnen het voorbeeld execv() als volgt herschrijven:
#includeint main(void)
char *programmanaam = "ls";
char *args[] = programmanaam, "-lh", "/home", NULL;
execvp(programmanaam, argumenten);
retourneer 0;
Zoals u kunt zien, wordt de juiste uitvoer weergegeven.
execle() Systeem Functie:
Werkt net als execl() maar u kunt uw eigen omgevingsvariabelen meegeven. De omgevingsvariabelen worden doorgegeven als een array envp. Het laatste element van de envp array moet NULL zijn. Alle andere elementen bevatten de sleutel-waardeparen als string.
Syntaxis:
int execle(const char *path, const char *arg,... , NULL, char * const envp[] );Een voorbeeld van de systeemfunctie execle() wordt hieronder gegeven:
#includeint main(void)
char *binaryPath = "/bin/bash";
char *arg1 = "-c";
char *arg2 = "echo "Bezoek $HOSTNAME:$PORT vanuit je browser."";
char *const env[] = "HOSTNAME=www.linuxhint.com", "POORT=8080", NULL;
execle(binaryPath, binaryPath,arg1, arg2, NULL, env);
retourneer 0;
Ik heb twee omgevingsvariabelen doorgegeven HOSTNAAM en HAVEN naar de execle() functie. Zoals je kunt zien, heb ik er toegang toe vanuit het uitvoerbare bestand /bin/bash.
execve() Systeem Functie:
Net als execle() kunt u uw eigen omgevingsvariabelen opgeven, samen met execve(). Je kunt ook argumenten als arrays doorgeven zoals je deed in execv().
Syntaxis:
int execve(const char *file, char *const argv[], char *const envp[]);Het voorbeeld execle() kan als volgt worden herschreven:
#includeint main(void)
char *binaryPath = "/bin/bash";
char *const args[] = binaryPath, "-c", "echo "Bezoek $HOSTNAME:$PORT
vanuit je browser."", NUL;
char *const env[] = "HOSTNAME=www.linuxhint.com", "POORT=8080", NULL;
execve(binaryPath, args, env);
retourneer 0;
Zoals je kunt zien, krijgen we dezelfde uitvoer als in het voorbeeld execle().
Dus zo gebruik je de exec-functiefamilie in C voor systeemprogrammering in Linux. Bedankt voor het lezen van dit artikel.