C Programmeren

Exec systeemoproep in C

Exec systeemoproep in C
De exec-familie heeft veel functies in C. Deze C-functies worden in principe gebruikt om een ​​systeemopdracht uit te voeren in een afzonderlijk proces dat het hoofdprogramma en de uitvoer afdrukt.

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:

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:

#include
 
int 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:

#include
 
int 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:

#include
 
int 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:

#include
 
int 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:

#include
 
int 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:

#include
 
int 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.

Installeer de nieuwste Dolphin Emulator voor Gamecube & Wii op Linux
Met de Dolphin Emulator kun je de door jou gekozen Gamecube- en Wii-spellen spelen op Linux Personal Computers (pc). Omdat het een vrij beschikbare e...
Hoe de GameConqueror Cheat Engine in Linux te gebruiken
Het artikel bevat een handleiding over het gebruik van de GameConqueror cheat-engine in Linux. Veel gebruikers die games op Windows spelen, gebruiken ...
Beste gameconsole-emulators voor Linux
Dit artikel bevat een lijst van populaire emulatiesoftware voor gameconsoles die beschikbaar is voor Linux. Emulatie is een softwarecompatibiliteitsla...