Exec System Call i C

Exec System Call 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 skriver ut.

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:

Exec -funksjonsfamiliene er definert i toppteksten 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:



  • int execl (const char *path, const char *arg, ..., NULL);
  • int execlp (const char *fil, const char *arg, ..., NULL);
  • int execv (const char *path, char *const argv []);
  • int execvp (const char *fil, 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 []);

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





execl () Systemfunksjon:

I execl () tar systemfunksjonen banen til den kjørbare binære filen (dvs. / bin / ls ) som det første og andre argumentet. Deretter argumenter (dvs. -lh , /hjem ) som du vil sende til den kjørbare filen etterfulgt av NULL . Deretter kjører execl () systemfunksjonen kommandoen og skriver ut utgangen. Hvis det oppstår en feil, returnerer execl () -1. Ellers returnerer det ingenting.

Syntaks:

inteksekl(konst røye *sti, konst røye *sint,...,NULL);

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



#inkludere

inthoved-(tomrom) {
røye *binaryPath= ' / bin / ls';
røye *arg1= '-lh';
røye *arg2= '/hjem';

eksekl(binaryPath,binaryPath,arg1,arg2,NULL);

komme tilbake 0;
}

Jeg løp ls -lh / home kommando ved hjelp av execl () systemfunksjon. Som du kan se, vises det riktige resultatet.

execlp () Systemfunksjon:

execl () bruker ikke STI miljøvariabel. Så hele banen til den kjørbare filen er nødvendig 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, hele banen er ikke nødvendig.

Syntaks:

intexeclp(konst røye *fil, konst røye *sint,...,NULL);

Vi kan skrive om execl () -eksemplet ved å bruke systemfunksjonen execlp () som følger:

#inkludere

inthoved-(tomrom) {
røye *programnavn= 'ls';
røye *arg1= '-lh';
røye *arg2= '/hjem';

execlp(programnavn,programnavn,arg1,arg2,NULL);

komme tilbake 0;
}

Jeg passerte bare kommandonavnet ls , ikke hele veien / bin / ls . Som du kan se, fikk jeg samme utgang som før.

execv () Systemfunksjon:

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

Syntaks:

inteksekv(konst røye *sti, røye *konstargv[]);

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

#inkludere

inthoved-(tomrom) {
røye *binaryPath= ' / bin / ls';
røye *args[] = {binaryPath, '-lh', '/hjem',NULL};

eksekv(binaryPath,args);

komme tilbake 0;
}

Som du kan se, får jeg riktig utgang.

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:

intexecvp(konst røye *fil, røye *konstargv[]);

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

#inkludere

inthoved-(tomrom) {
røye *programnavn= 'ls';
røye *args[] = {programnavn, '-lh', '/hjem',NULL};

execvp(programnavn,args);

komme tilbake 0;
}

Som du kan se, vises riktig utgang.

execle () Systemfunksjon:

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

Syntaks:

intutføre(konst røye *sti, konst røye *sint,...,NULL, røye * konstenvp[] );

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

#inkludere

inthoved-(tomrom) {
røye *binaryPath= '/bin/bash';
røye *arg1= '-c';
røye *arg2= 'kastet ut 'Besøk $ HOSTNAME:$ PORT fra nettleseren din.'';
røye *konstenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULL};

utføre(binaryPath,binaryPath,arg1,arg2,NULL,env);

komme tilbake 0;
}

Jeg besto to miljøvariabler HOSTNAME og HAVN til execle () -funksjonen. Som du kan se, kan jeg få tilgang til dem fra den kjørbare /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:

intutføre(konst røye *fil, røye *konstargv[], røye *konstenvp[]);

Execle () -eksemplet kan skrives om på følgende måte:

#inkludere

inthoved-(tomrom) {
røye *binaryPath= '/bin/bash';
røye *konstargs[] = {binaryPath, '-c', 'kastet ut 'Besøk $ HOSTNAME:$ PORT
fra nettleseren din.'',NULL};
røye *konstenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULL};

utføre(binaryPath,args,env);

komme tilbake 0;
}

Som du kan se, får vi samme output som i execle () -eksemplet.

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