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:
- int execl (const char * cesta, const char * arg,…, NULL);
- int execlp (const char * soubor, const char * arg,…, NULL);
- int execv (const char * cesta, char * const argv []);
- int execvp (soubor const char *, char * const argv []);
- int execle (const char * cesta, const char * arg,…, NULL, char * const envp []);
- int execve (const char * soubor, char * const argv [], char * const envp []);
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 ():
#zahrnoutint 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ě:
#zahrnoutint 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:
#zahrnoutint 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:
#zahrnoutint 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 ():
#zahrnoutint 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:
#zahrnoutint 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.