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:
#inkludereinthoved-(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:
#inkludereinthoved-(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:
#inkludereinthoved-(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:
#inkludereinthoved-(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:
#inkludereinthoved-(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.