Exec Sistemski klic v C.

Exec System Call C



Družina exec ima veliko funkcij v C. Te funkcije C se v bistvu uporabljajo za izvajanje sistemskega ukaza v ločenem procesu, ki glavni program natisne in izpiše.

V tem članku bom govoril o družini funkcij exec in vam pokazal, kako uporabljati vsako od teh funkcij družine exec v C. Torej, začnimo.







C Sistemske funkcije v družini Exec:

Družine funkcij exec so definirane v glavi unistd.h . Zato morate uporabiti to glavo v programu C, kjer želite uporabljati te funkcije.



Razpoložljive funkcije exec skupaj s parametri njihovih funkcij so navedene spodaj:



  • int execl (const char *pot, const char *arg,…, NULL);
  • int execlp (datoteka const char *, const char *arg,…, NULL);
  • int execv (const char *pot, char *const argv []);
  • int execvp (datoteka const char *, char *const argv []);
  • int execle (const char *pot, const char *arg,…, NULL, char *const envp []);
  • int execve (datoteka const char *, char *const argv [], char *const envp []);

Poglejmo, kaj vsaka od teh funkcij počne in kako jih uporabljati.





Sistemska funkcija execl ():

V sistemski funkciji execl () gre po poti izvršljive binarne datoteke (tj. / bin / ls ) kot prvi in ​​drugi argument. Nato argumenti (tj. -hh , /domov ), ki ga želite prenesti v izvedljivo datoteko, ki ji sledi NIČ . Nato sistemska funkcija execl () zažene ukaz in natisne izhod. Če pride do napake, execl () vrne -1. V nasprotnem primeru ne vrne ničesar.

Sintaksa:

intexecl(const char *pot, const char *jezen,...,NIČ);

Spodaj je naveden primer sistemske funkcije execl ():



#vključi

intglavni(nično) {
char *binaryPath= ' / bin / ls';
char *arg1= '-lh';
char *arg2= '/home';

execl(binaryPath,binaryPath,arg1,arg2,NIČ);

vrnitev 0;
}

Vodil sem ls -lh / doma ukaz z uporabo sistemske funkcije execl (). Kot lahko vidite, se prikaže pravilen rezultat.

execlp () Sistemska funkcija:

execl () ne uporablja POT spremenljivka okolja. Zato je za zagon z execl () potrebna celotna pot izvršljive datoteke. execlp () uporablja spremenljivko okolja PATH. Torej, če je izvedljiva datoteka ali ukaz na voljo v PATH, potem ukaz ali ime datoteke zadostuje za zagon, celotna pot ni potrebna.

Sintaksa:

intexeclp(const char *mapa, const char *jezen,...,NIČ);

Primer execl () lahko prepišemo s sistemsko funkcijo execlp () na naslednji način:

#vključi

intglavni(nično) {
char *ime programa= 'ls';
char *arg1= '-lh';
char *arg2= '/home';

execlp(ime programa,ime programa,arg1,arg2,NIČ);

vrnitev 0;
}

Posredoval sem samo ime ukaza ls , ne po celotni poti / bin / ls . Kot vidite, sem dobil enak rezultat kot prej.

Sistemska funkcija execv ():

V funkciji execl () se parametri izvedljive datoteke posredujejo funkciji kot različni argumenti. Z execv () lahko vse parametre posredujete v matriki, končani z NULL argv . Prvi element matrike mora biti pot izvršljive datoteke. V nasprotnem primeru funkcija execv () deluje tako kot funkcija execl ().

Sintaksa:

intexecv(const char *pot, char *constargv[]);

Primer execl () lahko prepišemo na naslednji način:

#vključi

intglavni(nično) {
char *binaryPath= ' / bin / ls';
char *args[] = {binaryPath, '-lh', '/home',NIČ};

execv(binaryPath,args);

vrnitev 0;
}

Kot vidite, dobim pravilen izhod.

Sistemska funkcija execvp ():

Deluje na enak način kot sistemska funkcija execv (). Vendar se uporablja spremenljivka okolja PATH. Torej celotna pot izvršljive datoteke ni potrebna, tako kot v execlp ().

Sintaksa:

intexecvp(const char *mapa, char *constargv[]);

Primer execv () lahko prepišemo na naslednji način:

#vključi

intglavni(nično) {
char *ime programa= 'ls';
char *args[] = {ime programa, '-lh', '/home',NIČ};

execvp(ime programa,args);

vrnitev 0;
}

Kot lahko vidite, se prikaže pravilen izhod.

Sistemska funkcija execle ():

Deluje tako kot execl (), vendar lahko skupaj z njim podate tudi svoje spremenljivke okolja. Spremenljivke okolja se posredujejo kot matrika envp . Zadnji element envp polje mora biti NULL. Vsi drugi elementi vsebujejo pare ključ-vrednost kot niz.

Sintaksa:

intexecle(const char *pot, const char *jezen,...,NIČ, char * constenvp[] );

Spodaj je naveden primer sistemske funkcije execle ():

#vključi

intglavni(nično) {
char *binaryPath= '/bin/bash';
char *arg1= '-c';
char *arg2= 'vrgel ven'Obiščite $ HOSTNAME:$ PORT iz vašega brskalnika.'';
char *constenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NIČ};

execle(binaryPath,binaryPath,arg1,arg2,NIČ,env);

vrnitev 0;
}

Opravil sem dve spremenljivki okolja HOSTNAME in PORT v funkcijo execle (). Kot vidite, do njih dostopam iz izvedljive datoteke /bin/bash .

execve () Sistemska funkcija:

Tako kot execle () lahko podate tudi lastne spremenljivke okolja skupaj z execve (). Argumente lahko posredujete tudi kot matrike, kot ste to storili v execv ().

Sintaksa:

intexecve(const char *mapa, char *constargv[], char *constenvp[]);

Primer execle () lahko prepišemo na naslednji način:

#vključi

intglavni(nično) {
char *binaryPath= '/bin/bash';
char *constargs[] = {binaryPath, '-c', 'vrgel ven'Obiščite $ HOSTNAME:$ PORT
iz brskalnika.'',NIČ};
char *constenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NIČ};

execve(binaryPath,args,env);

vrnitev 0;
}

Kot lahko vidite, dobimo enak izhod kot v primeru execle ().

Torej, tako uporabljate družino funkcij exec v C za sistemsko programiranje v Linuxu. Hvala, ker ste prebrali ta članek.