C programozás

Végezze el a rendszerhívást C-ben

Végezze el a rendszerhívást C-ben
Az exec családnak számos funkciója van C-ben. Ezeket a C függvényeket alapvetően arra használják, hogy a rendszer parancsot külön folyamatban futtassák, amelyet a fő program és a kimenet nyomtat.

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:

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:

#include
 
int 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:

#include
 
int 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:

#include
 
int 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:

#include
 
int 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:

#include
 
int 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:

#include
 
int 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.

Az egér és az érintőpad beállításainak módosítása az Xinput használatával Linux alatt
A legtöbb Linux disztribúció alapértelmezés szerint „libinput” könyvtárral szállítja a rendszer bemeneti eseményeit. Feldolgozhatja a Wayland és az X ...
Az X-Mouse Button Control segítségével az egér gombjait másképp alakíthatja át a különböző szoftvereknél
Lehet, hogy szüksége van egy eszközre, amely megváltoztathatja az egér vezérlését minden használt alkalmazással. Ebben az esetben kipróbálhatja az úgy...
Microsoft Sculpt Touch vezeték nélküli egér áttekintés
Nemrég olvastam a Microsoft Sculpt Touch vezeték nélküli egér és úgy döntött, hogy megveszi. Egy ideig használat után úgy döntöttem, hogy megosztom ve...