Ebben a cikkben a végrehajtó függvénycsaládról fogok beszélni, és megmutatom, hogyan kell használni ezeket a végrehajtó családfunkciókat a C -ben. Tehát kezdjük.
C Rendszerfunkciók az Exec családban:
A végrehajtási 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 szeretné.
A rendelkezésre álló végrehajtási függvények és azok paraméterei az alábbiakban találhatók:
- 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 *path, const char *arg,…, NULL, char *const envp []);
- int execve (const char *fájl, char *const argv [], char *const envp []);
Nézzük meg, mit tesznek ezek a funkciók, és hogyan kell használni őket.
execl () Rendszerfunkció:
Az execl () programban a rendszerfüggvény a végrehajtható bináris fájl elérési útját (azaz / bin / ls ) első és második érvként. Ezután az érvek (pl. -lh , /itthon ), amelyet át szeretne adni a futtatható fájlnak, amelyet követ NULLA . Ezután az execl () rendszerfüggvény futtatja a parancsot, és kinyomtatja a kimenetet. Ha bármilyen hiba történik, akkor az execl () -1 értéket ad vissza. Ellenkező esetben nem ad vissza semmit.
Szintaxis:
intvégrehajt(const char *pálya, const char *mérges,...,NULLA);Az Execl () rendszerműveletre egy példa található az alábbiakban:
#befoglalni
intfő-(üres) {
char *binaryPath= ' / bin / ls';
char *arg1= '-lh';
char *arg2= '/itthon';
végrehajt(binaryPath,binaryPath,arg1,arg2,NULLA);
Visszatérés 0;
}
Futottam a ls -lh / haza parancs az execl () rendszerművelet használatával. Mint látható, a helyes eredmény jelenik meg.
execlp () Rendszerfunkció:
Az execl () nem használja a PÁLYA környezeti változó. Tehát a végrehajtható fájl teljes elérési útja szükséges a execl () fájllal való futtatáshoz. 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:
intexeclp(const char *fájlt, const char *mérges,...,NULLA);Az execlp () példát az execlp () rendszerfüggvény segítségével írhatjuk át az alábbiak szerint:
#befoglalniintfő-(üres) {
char *programName= 'van';
char *arg1= '-lh';
char *arg2= '/itthon';
execlp(programName,programName,arg1,arg2,NULLA);
Visszatérés 0;
}
Csak a parancs nevét adtam meg ls , nem a teljes út / bin / ls . Mint látható, ugyanazt a kimenetet kaptam, mint korábban.
execv () Rendszerfunkció:
Az execl () függvényben a végrehajtható fájl paraméterei különböző argumentumként kerülnek átadásra a függvénynek. Az execv () segítségével átadhatja az összes paramétert egy NULL terminált tömbben argv . A tömb első eleme a végrehajtható fájl elérési útja legyen. Ellenkező esetben a execv () függvény ugyanúgy működik, mint az execl () függvény.
Szintaxis:
intexecv(const char *pálya, char *constargv[]);Az execl () példát a következőképpen írhatjuk át:
#befoglalniintfő-(üres) {
char *binaryPath= ' / bin / ls';
char *args[] = {binaryPath, '-lh', '/itthon',NULLA};
execv(binaryPath,args);
Visszatérés 0;
}
Amint látja, a megfelelő kimenetet kapom.
execvp () Rendszerfunkció:
Ugyanúgy működik, mint az execv () rendszerfüggvény. De a PATH környezeti változót használják. Tehát a végrehajtható fájl teljes elérési útja nem szükséges, mint a execlp ().
Szintaxis:
intexecvp(const char *fájlt, char *constargv[]);Az execv () példát a következőképpen írhatjuk át:
#befoglalniintfő-(üres) {
char *programName= 'van';
char *args[] = {programName, '-lh', '/itthon',NULLA};
execvp(programName,args);
Visszatérés 0;
}
Mint látható, a megfelelő kimenet jelenik meg.
execle () Rendszerfunkció:
Ugyanúgy működik, mint az execl (), de megadhatja saját környezeti változóit is. A környezeti változók tömbként kerülnek átadásra envp . Az utolsó elem a envp tömb NULL legyen. Az összes többi elem tartalmazza a kulcs-érték párokat karakterláncként.
Szintaxis:
intexecle(const char *pálya, const char *mérges,...,NULLA, char * constenvp[] );Az execle () rendszerfüggvény példája az alábbiakban található:
#befoglalniintfő-(üres) {
char *binaryPath= '/bin/bash';
char *arg1= '-c';
char *arg2= 'kidobta'Látogassa meg a $ HOSTNAME webhelyet:$ PORT a böngészőből.'';
char *constenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULLA};
execle(binaryPath,binaryPath,arg1,arg2,NULLA,env);
Visszatérés 0;
}
Két környezeti változót adtam át HOSTNAME és KIKÖTŐ az execle () függvényhez. Amint látja, a végrehajtható fájlból férhetek hozzá /bin/bash .
execve () Rendszerfunkció:
Csakúgy, mint az execle (), az execve () mellett megadhatja saját környezeti változóit is. Az argumentumokat tömbként is átadhatja, mint az execv () fájlban.
Szintaxis:
intvégrehajtani(const char *fájlt, char *constargv[], char *constenvp[]);Az execle () példa a következőképpen írható át:
#befoglalniintfő-(üres) {
char *binaryPath= '/bin/bash';
char *constargs[] = {binaryPath, '-c', 'kidobta'Látogassa meg a $ HOSTNAME webhelyet:$ PORT
a böngészőből.'',NULLA};
char *constenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULLA};
végrehajtani(binaryPath,args,env);
Visszatérés 0;
}
Amint láthatja, ugyanazt a kimenetet kapjuk, mint az execle () példában.
Tehát így használja a C végrehajtási függvénycsaládját a C rendszerben a Linux programozásához. Köszönjük, hogy elolvasta ezt a cikket.