C Programmering

Utfør systemanrop i C

Utfør systemanrop i C
Exec-familien har mange funksjoner i C. Disse C-funksjonene brukes i utgangspunktet til å kjøre en systemkommando i en egen prosess som hovedprogrammet og skrive ut utdataene.

I denne artikkelen skal jeg snakke om exec-familien av funksjoner og vise deg hvordan du bruker hver av disse exec-familiefunksjonene i C. Så la oss komme i gang.

C Systemfunksjoner i Exec-familien:

Familiene for exec-funksjonen er definert i overskriften unistd.h. Så du må bruke denne overskriften på C-programmet der du vil bruke disse funksjonene.

De tilgjengelige exec-funksjonene sammen med funksjonsparametrene er gitt nedenfor:

La oss se hva hver av disse funksjonene gjør og hvordan du bruker dem.

execl () Systemfunksjon:

I execl () tar systemfunksjon banen til den kjørbare binære filen (i.e. / søppel / ls) som første og andre argument. Så argumentene (i.e. -lh, /hjem) som du vil overføre til den kjørbare, etterfulgt av NULL. Deretter kjører execl () systemfunksjon kommandoen og skriver ut utdata. Hvis det oppstår en feil, returnerer execl () -1. Ellers returnerer det ingenting.

Syntaks:

int execl (const char * path, const char * arg,…, NULL);

Et eksempel på execl () systemfunksjon er gitt nedenfor:

#inkludere
 
int main (ugyldig)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ hjem";
 
execl (binaryPath, binaryPath, arg1, arg2, NULL);
 
retur 0;

Jeg kjørte ls -lh / hjem kommando ved hjelp av execl () systemfunksjon. Som du ser, vises riktig resultat.

execlp () Systemfunksjon:

execl () bruker ikke STI miljøvariabel. Så det er nødvendig med hele banen til den kjørbare filen for å kjøre den med execl (). execlp () bruker PATH-miljøvariabelen. Så hvis en kjørbar fil eller kommando er tilgjengelig i PATH, er kommandoen eller filnavnet nok til å kjøre den, den fulle banen er ikke nødvendig.

Syntaks:

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

Vi kan omskrive execl () -eksemplet ved hjelp av execlp () -systemfunksjonen som følger:

#inkludere
 
int main (ugyldig)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ hjem";
 
execlp (programnavn, programnavn, arg1, arg2, NULL);
 
retur 0;

Jeg passerte bare kommandonavnet ls, ikke hele veien / søppel / ls. Som du ser, fikk jeg samme utgang som før.

execv () Systemfunksjon:

I execl () -funksjonen overføres parametrene til den kjørbare filen til funksjonen som forskjellige argumenter. Med execv () kan du sende alle parametrene i en NULL-avsluttet matrise argv. Det første elementet i matrisen skal være banen til den kjørbare filen. Ellers fungerer execv () -funksjonen akkurat som execl () -funksjon.

Syntaks:

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

Vi kan omskrive execl () -eksemplet som følger:

#inkludere
 
int main (ugyldig)
char * binaryPath = "/ bin / ls";
char * args [] = binaryPath, "-lh", "/ home", NULL;
 
execv (binaryPath, args);
 
retur 0;

Som du ser, får jeg riktig utdata.

execvp () Systemfunksjon:

Fungerer på samme måte som execv () systemfunksjon. Men PATH-miljøvariabelen brukes. Så den fullstendige banen til den kjørbare filen er ikke nødvendig akkurat som i execlp ().

Syntaks:

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

Vi kan omskrive execv () -eksemplet som følger:

#inkludere
 
int main (ugyldig)
char * programName = "ls";
char * args [] = programnavn, "-lh", "/ home", NULL;
 
execvp (programnavn, args);
 
retur 0;

Som du kan se, vises riktig utgang.

execle () Systemfunksjon:

Fungerer akkurat som execl (), men du kan oppgi dine egne miljøvariabler sammen med den. Miljøvariablene sendes som en matrise envp. Det siste elementet i envp matrisen skal være NULL. Alle de andre elementene inneholder nøkkelverdiparene som streng.

Syntaks:

int execle (const char * path, const char * arg,…, NULL, char * const envp []);

Et eksempel på execle () systemfunksjon er gitt nedenfor:

#inkludere
 
int main (ugyldig)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" Besøk $ HOSTNAME: $ PORT fra nettleseren din."";
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
 
execle (binaryPath, binaryPath, arg1, arg2, NULL, env);
 
retur 0;

Jeg passerte to miljøvariabler VERTNAMN og HAVN til execle () -funksjonen. Som du ser, kan jeg få tilgang til dem fra den kjørbare filen / bin / bash.

execve () Systemfunksjon:

Akkurat som execle () kan du oppgi dine egne miljøvariabler sammen med execve (). Du kan også sende argumenter som matriser som du gjorde i execv ().

Syntaks:

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

Eksemplet på execle () kan skrives om som følger:

#inkludere
 
int main (ugyldig)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Besøk $ HOSTNAME: $ PORT
fra nettleseren din."", NULL;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
 
execve (binaryPath, args, env);
 
retur 0;

Som du ser, får vi samme utgang som i execle () -eksemplet.

Så det er slik du bruker exec-funksjonsfamilien i C for systemprogrammering i Linux. Takk for at du leser denne artikkelen.

Hvordan vise FPS-teller i Linux-spill
Linux-spill fikk et stort press da Valve kunngjorde Linux-støtte for Steam-klient og spillene deres i 2012. Siden den gang har mange AAA- og indiespil...
Hvordan laste ned og spille Sid Meier's Civilization VI på Linux
Introduksjon til spillet Civilization 6 er et moderne syn på det klassiske konseptet som ble introdusert i serien av Age of Empires-spillene. Ideen va...
Hvordan installere og spille Doom på Linux
Introduksjon til Doom Doom-serien stammer fra 90-tallet etter utgivelsen av den originale Doom. Det ble en øyeblikkelig suksess, og fra den tiden og u...