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čiintglavni(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čiintglavni(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čiintglavni(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čiintglavni(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čiintglavni(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.