Ebben a cikkben az exec függvénycsaládról fogok beszélni, és bemutatom, hogyan kell használni ezeket az exec családfüggvényeket a C. Tehát kezdjük.
C rendszerfunkciók az Exec családban:
Az exec függvénycsaládokat a fejléc határozza meg unistd.h. Tehát ezt a fejlécet kell használnia a C programban, ahol ezeket a funkciókat használni kívánja.
Az elérhető exec függvények és azok paraméterei az alábbiak:
- int execl (const char * elérési út, const char * arg,…, NULL);
- int execlp (const char * fájl, const char * arg,…, NULL);
- int execv (const char * útvonal, char * const argv []);
- int execvp (const char * fájl, char * const argv []);
- int execle (const char * elérési út, const char * arg,…, NULL, char * const envp []);
- int execve (const char * fájl, char * const argv [], char * const envp []);
Nézzük meg, hogy ezek a funkciók mit csinálnak és hogyan használják őket.
execl () Rendszer funkció:
Az execl () rendszerben a függvény a futtatható bináris fájl elérési útját veszi át (i.e. / bin / ls) első és második érvként. Ezután az érvek (i.e. -lh, /itthon), amelyet át akar adni a futtatható fájlnak, majd a NULLA. Ezután az execl () system function futtatja a parancsot, és kinyomtatja a kimenetet. Ha bármilyen hiba történik, akkor az execl () -1-et ad vissza. Ellenkező esetben nem ad semmit.
Szintaxis:
int execl (const char * elérési út, const char * arg,…, NULL);Az alábbiakban az execl () rendszerfunkcióra mutatunk be példát:
#includeint main (érvénytelen)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ home";
execl (binaryPath, binaryPath, arg1, arg2, NULL);
visszatér 0;
Futottam a ls -lh / otthon parancsot az execl () rendszerfunkcióval. Amint láthatja, a helyes eredmény jelenik meg.
execlp () Rendszer funkció:
Az execl () nem használja a PÁLYA környezeti változó. Tehát az execl () futtatásához a futtatható fájl teljes elérési útja szükséges. Az execlp () a PATH környezeti változót használja. Tehát, ha egy futtatható fájl vagy parancs elérhető a PATH-ban, akkor a parancs vagy a fájlnév elegendő a futtatásához, a teljes elérési útra nincs szükség.
Szintaxis:
int execlp (const char * fájl, const char * arg,…, NULL);Az execl () példát az execlp () rendszerfüggvény használatával a következőképpen írhatjuk át:
#includeint main (érvénytelen)
char * programNév = "ls";
char * arg1 = "-lh";
char * arg2 = "/ home";
execlp (programNév, programNév, arg1, arg2, NULL);
visszatér 0;
Csak a parancs nevét adtam át ls, nem a teljes utat / bin / ls. Mint láthatja, ugyanazt a kimenetet kaptam, mint korábban.
execv () Rendszer funkció:
Az execl () függvényben a futtatható fájl paramétereit különböző argumentumként továbbítják a függvénynek. Az execv () segítségével átadhatja az összes paramétert egy NULL végződésű tömbben argv. A tömb első elemének a futtatható fájl elérési útjának kell lennie. Egyébként az execv () függvény ugyanúgy működik, mint az execl () függvény.
Szintaxis:
int execv (const char * elérési út, char * const argv []);Az execl () példát a következőképpen írhatjuk át:
#includeint main (érvénytelen)
char * binaryPath = "/ bin / ls";
char * args [] = binárisPath, "-lh", "/ home", NULL;
execv (binaryPath, args);
visszatér 0;
Amint láthatja, a megfelelő kimenetet kapom.
execvp () Rendszer funkció:
Ugyanúgy működik, mint az execv () rendszerfunkció. De a PATH környezeti változót használjuk. Tehát nem szükséges a futtatható fájl teljes elérési útja, csakúgy, mint az execlp () fájlban.
Szintaxis:
int execvp (const char * fájl, char * const argv []);Az execv () példát a következőképpen írhatjuk át:
#includeint main (érvénytelen)
char * programNév = "ls";
char * args [] = programNév, "-lh", "/ home", NULL;
execvp (programNév, érvek);
visszatér 0;
Amint láthatja, a helyes kimenet jelenik meg.
execle () Rendszer funkció:
Úgy működik, mint az execl (), de megadhatja saját környezeti változóit is. A környezeti változókat tömbként adjuk át envp. A. Utolsó eleme envp tömb NULL legyen. Az összes többi elem a kulcs-érték párokat tartalmazza stringként.
Szintaxis:
int execle (const char * elérési út, const char * arg,…, NULL, char * const envp []);Az alábbiakban az execle () rendszerfunkcióra mutatunk be példát:
#includeint main (érvénytelen)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" Keresse fel böngészőjében a (z) $ HOSTNAME: $ PORT webhelyet."";
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
execle (binaryPath, binaryPath, arg1, arg2, NULL, env);
visszatér 0;
Két környezeti változót adtam át HOSTNAME és KIKÖTŐ az execle () függvényhez. Mint láthatja, a futtatható fájlból férek hozzá / bin / bash.
execve () Rendszer funkció:
Csakúgy, mint az execle (), az execve () mellett megadhatja saját környezeti változóit is. Az argumentumokat tömbként is megadhatja, mint az execv ().
Szintaxis:
int execve (const char * fájl, char * const argv [], char * const envp []);Az execle () példa a következőképpen írható át:
#includeint main (érvénytelen)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Látogasson el ide: $ HOSTNAME: $ PORT
a böngészőből."", NULLA;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
végrehajtani (binaryPath, args, env);
visszatér 0;
Mint láthatja, ugyanazt a kimenetet kapjuk, mint az execle () példában.
Tehát így használja az exec függvénycsaládot a C-ben a rendszer programozásához Linux alatt. Köszönjük, hogy elolvasta ezt a cikket.