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. Torej, morate uporabiti to glavo v programu C, kjer želite uporabljati te funkcije.
Razpoložljive funkcije exec skupaj z njihovimi parametri funkcij so podane spodaj:
- int execl (pot const char *, const char * arg,…, NULL);
- int execlp (datoteka const char *, const char * arg,…, NULL);
- int execv (pot const char *, char * const argv []);
- int execvp (datoteka const char *, char * const argv []);
- int execle (pot const char *, const char * arg,…, NULL, char * const envp []);
- int execve (datoteka const char *, char * const argv [], char * const envp []);
Poglejmo, kaj počne vsaka od teh funkcij in kako jih uporabiti.
execl () Sistemska funkcija:
V sistemu execl () sistem zavzame pot izvršljive binarne datoteke (tj.e. / bin / ls) kot prvi in drugi argument. Nato argumenti (tj.e. -lh, / domov), ki ga želite prenesti v izvršljivo datoteko, ki ji sledi NIČ. Nato sistemska funkcija execl () zažene ukaz in natisne izhod. Če pride do kakršne koli napake, execl () vrne -1. V nasprotnem primeru ne vrne ničesar.
Sintaksa:
int execl (pot const char *, const char * arg,…, NULL);Primer sistemske funkcije execl () je podan spodaj:
#includeint main (void)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ domov";
execl (binarna pot, binarna pot, arg1, arg2, NULL);
vrnitev 0;
Vodil sem ls -lh / domov ukaz z uporabo sistemske funkcije execl (). Kot vidite, se prikaže pravi rezultat.
execlp () Sistemska funkcija:
execl () ne uporablja datoteke POT spremenljivka okolja. Torej je za zagon z execl () potrebna celotna pot izvršljive datoteke. execlp () uporablja spremenljivko okolja PATH. Torej, če je v PATH na voljo izvedljiva datoteka ali ukaz, potem je ukaz ali ime datoteke dovolj za zagon, celotna pot ni potrebna.
Sintaksa:
int execlp (datoteka const char *, const char * arg,…, NULL);Primer execl () lahko znova uporabimo s sistemsko funkcijo execlp (), kot sledi:
#includeint main (void)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ domov";
execlp (programName, programName, arg1, arg2, NULL);
vrnitev 0;
Predal sem samo ime ukaza ls, ne celotna pot / bin / ls. Kot lahko vidite, sem dobil enake rezultate kot prej.
execv () sistemska funkcija:
V funkciji execl () se parametri izvršljive datoteke funkciji posredujejo kot različni argumenti. Z execv () lahko prenesete vse parametre v NULL zaključeno polje argv. Prvi element polja naj bo pot do izvršljive datoteke. V nasprotnem primeru funkcija execv () deluje tako kot funkcija execl ().
Sintaksa:
int execv (pot const char *, char * const argv []);Primer execl () lahko prepišemo na naslednji način:
#includeint main (void)
char * binaryPath = "/ bin / ls";
char * args [] = binaryPath, "-lh", "/ home", NULL;
execv (binarna pot, argumenti);
vrnitev 0;
Kot lahko vidite, dobim pravi rezultat.
execvp () Sistemska funkcija:
Deluje enako kot sistemska funkcija execv (). Vendar se uporablja spremenljivka okolja PATH. Torej, celotna pot izvršljive datoteke ni potrebna, tako kot v execlp ().
Sintaksa:
int execvp (datoteka const char *, char * const argv []);Primer execv () lahko prepišemo na naslednji način:
#includeint main (void)
char * programName = "ls";
char * args [] = programName, "-lh", "/ home", NULL;
execvp (programName, args);
vrnitev 0;
Kot vidite, se prikaže pravi izhod.
execle () Sistemska funkcija:
Deluje tako kot execl (), vendar lahko skupaj z njim zagotovite 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:
int execle (pot const char *, const char * arg,…, NULL, char * const envp []);Primer sistemske funkcije execle () je podan spodaj:
#includeint main (void)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" V brskalniku obiščite $ HOSTNAME: $ PORT."";
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
execle (binarna pot, binarna pot, arg1, arg2, NULL, env);
vrnitev 0;
Prenesel sem dve spremenljivki okolja HOSTNAME in PRISTANIŠČE v funkcijo execle (). Kot lahko vidite, do njih lahko dostopam iz izvršljive datoteke / bin / bash.
execve () Sistemska funkcija:
Tako kot execle () lahko skupaj z execve () zagotovite tudi svoje spremenljivke okolja. Argumente lahko posredujete tudi kot nize, kot ste storili v execv ().
Sintaksa:
int execve (datoteka const char *, char * const argv [], char * const envp []);Primer execle () je mogoče prepisati na naslednji način:
#includeint main (void)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Obiščite $ HOSTNAME: $ PORT
v brskalniku."", NIČ;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
execve (binarna pot, 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.