C Programmering

Udfør systemopkald i C

Udfør systemopkald i C
Exec-familien har mange funktioner i C. Disse C-funktioner bruges dybest set til at køre en systemkommando i en separat proces, hvor hovedprogrammet og udskrive output.

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:

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:

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

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

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

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

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

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

HD Remastered-spil til Linux, der aldrig tidligere havde haft en Linux-udgivelse
Mange spiludviklere og udgivere kommer med HD-remaster af gamle spil for at forlænge franchisens levetid. Venligst fans, der anmoder om kompatibilitet...
Sådan bruges AutoKey til at automatisere Linux-spil
AutoKey er et desktopautomatiseringsværktøj til Linux og X11, programmeret i Python 3, GTK og Qt. Ved hjælp af dets scripting og MACRO-funktionalitet ...
Sådan vises FPS-tæller i Linux-spil
Linux-spil fik et stort skub, da Valve annoncerede Linux-support til Steam-klient og deres spil i 2012. Siden da har mange AAA- og indiespil fundet ve...