C Programování

Systémové volání Exec v C

Systémové volání Exec v C
Rodina exec má v C mnoho funkcí. Tyto funkce C se v zásadě používají ke spuštění systémového příkazu v samostatném procesu, který je hlavním programem, a k tisku výstupu.

V tomto článku budu hovořit o rodině funkcí exec a ukážu vám, jak používat každou z těchto funkcí rodiny exec v C. Pojďme tedy začít.

Funkce systému C v rodině Exec:

Rodiny funkcí exec jsou definovány v záhlaví unistd.h. Tuto hlavičku tedy musíte použít v programu C, kde chcete tyto funkce používat.

Níže jsou uvedeny dostupné funkce exec spolu s jejich funkčními parametry:

Podívejme se, co každá z těchto funkcí dělá a jak je používat.

execl () Funkce systému:

V systému execl () se funkce systému vydává cestou spustitelného binárního souboru (tj.E. / bin / ls) jako první a druhý argument. Poté argumenty (tj.E. -lh, /Domov), který chcete předat spustitelnému souboru následovanému NULA. Poté systémová funkce execl () spustí příkaz a vytiskne výstup. Pokud dojde k nějaké chybě, vrátí execl () hodnotu -1. Jinak nic nevrátí.

Syntax:

int execl (const char * cesta, const char * arg,…, NULL);

Níže je uveden příklad systémové funkce execl ():

#zahrnout
 
int main (void)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ home";
 
execl (binaryPath, binaryPath, arg1, arg2, NULL);
 
návrat 0;

Spustil jsem ls -lh / home příkaz pomocí systémové funkce execl (). Jak vidíte, zobrazí se správný výsledek.

Funkce systému execlp ():

execl () nepoužívá CESTA proměnná prostředí. Ke spuštění souboru s execl () je tedy vyžadována úplná cesta spustitelného souboru. execlp () používá proměnnou prostředí PATH. Pokud je tedy v PATH k dispozici spustitelný soubor nebo příkaz, pak stačí příkaz nebo název souboru k jeho spuštění, není potřeba úplná cesta.

Syntax:

int execlp (const char * soubor, const char * arg, ..., NULL);

Příklad execl () můžeme přepsat pomocí systémové funkce execlp () následovně:

#zahrnout
 
int main (void)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ home";
 
execlp (programName, programName, arg1, arg2, NULL);
 
návrat 0;

Předal jsem jen jméno příkazu je, ne úplná cesta / bin / ls. Jak vidíte, dostal jsem stejný výstup jako předtím.

Funkce systému execv ():

Ve funkci execl () se parametry spustitelného souboru předávají funkci jako různé argumenty. Pomocí příkazu execv () můžete předat všechny parametry v poli zakončeném NULL argv. Prvním prvkem pole by měla být cesta ke spustitelnému souboru. Jinak funkce execv () funguje stejně jako funkce execl ().

Syntax:

int execv (const char * cesta, char * const argv []);

Příklad execl () můžeme přepsat takto:

#zahrnout
 
int main (void)
char * binaryPath = "/ bin / ls";
char * args [] = binaryPath, "-lh", "/ home", NULL;
 
execv (binaryPath, args);
 
návrat 0;

Jak vidíte, dostávám správný výstup.

Funkce systému execvp ():

Funguje stejně jako funkce systému execv (). Je ale použita proměnná prostředí PATH. Úplná cesta spustitelného souboru tedy není vyžadována stejně jako v execlp ().

Syntax:

int execvp (soubor const char *, char * const argv []);

Příklad execv () můžeme přepsat takto:

#zahrnout
 
int main (void)
char * programName = "ls";
char * args [] = programName, "-lh", "/ home", NULL;
 
execvp (programName, args);
 
návrat 0;

Jak vidíte, zobrazí se správný výstup.

Funkce systému execle ():

Funguje stejně jako execl (), ale spolu s ním můžete poskytnout vlastní proměnné prostředí. Proměnné prostředí se předávají jako pole envp. Poslední prvek envp pole by mělo mít hodnotu NULL. Všechny ostatní prvky obsahují páry klíč – hodnota jako řetězec.

Syntax:

int execle (const char * cesta, const char * arg,…, NULL, char * const envp []);

Níže je uveden příklad systémové funkce execle ():

#zahrnout
 
int main (void)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" Navštivte ve svém prohlížeči $ HOSTNAME: $ PORT."";
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
 
execle (binaryPath, binaryPath, arg1, arg2, NULL, env);
 
návrat 0;

Předal jsem dvě proměnné prostředí HOSTNAME a PŘÍSTAV do funkce execle (). Jak vidíte, mám k nim přístup ze spustitelného souboru / bin / bash.

Funkce systému execve ():

Stejně jako execle () můžete poskytnout vlastní proměnné prostředí spolu s execve (). Můžete také předat argumenty jako pole, jako jste to udělali v execv ().

Syntax:

int execve (soubor const char *, char * const argv [], char * const envp []);

Příklad execle () lze přepsat takto:

#zahrnout
 
int main (void)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Navštivte $ HOSTNAME: $ PORT
z vašeho prohlížeče."", NULA;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
 
execve (binaryPath, args, env);
 
návrat 0;

Jak vidíte, dostaneme stejný výstup jako v příkladu execle ().

Takto tedy používáte rodinu funkcí exec v C pro programování systému v Linuxu. Děkujeme za přečtení tohoto článku.

Hry Nejlepší aplikace pro mapování gamepadu pro Linux
Nejlepší aplikace pro mapování gamepadu pro Linux
Pokud rádi hrajete hry na Linuxu s gamepadem místo typického vstupního systému pro klávesnici a myš, máte k dispozici několik užitečných aplikací. Mno...
Hry Užitečné nástroje pro hráče Linuxu
Užitečné nástroje pro hráče Linuxu
Pokud rádi hrajete hry na Linuxu, je pravděpodobné, že jste ke zlepšení herního zážitku použili aplikace a nástroje jako Wine, Lutris a OBS Studio. Kr...
Hry HD remasterované hry pro Linux, které nikdy dříve neměly vydání Linuxu
HD remasterované hry pro Linux, které nikdy dříve neměly vydání Linuxu
Mnoho vývojářů a vydavatelů her přichází s HD remasterem starých her, aby prodloužili životnost franšízy, prosím fanoušky, kteří požadují kompatibilit...