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. Takže začněme.
Funkce systému C v rodině Exec:
V záhlaví jsou definovány rodiny funkcí exec unistd.h . Tuto hlavičku tedy musíte použít v programu C, kde chcete tyto funkce používat.
Dostupné funkce exec spolu s jejich funkčními parametry jsou uvedeny níže:
- int execl (const char *cesta, const char *arg, ..., NULL);
- int execlp (soubor const char *, 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 (soubor const char *, 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 execl () systémová funkce bere cestu spustitelného binárního souboru (tj. / bin / ls ) jako první a druhý argument. Poté argumenty (tj. -lh , /Domov ), který chcete předat spustitelnému souboru a za ním NULA . Poté systémová funkce execl () spustí příkaz a vytiskne výstup. Pokud dojde k nějaké chybě, pak execl () vrátí -1. Jinak nic nevrací.
Syntax:
intpopravit(konst char *cesta, konst char *rozzlobený,...,NULA);Níže je uveden příklad systémové funkce execl ():
#zahrnout
inthlavní(prázdné) {
char *binární cesta= ' / bin / ls';
char *arg1= '-lh';
char *arg2= '/Domov';
popravit(binární cesta,binární cesta,arg1,arg2,NULA);
vrátit se 0;
}
Běžel jsem ls -lh / domů příkaz pomocí systémové funkce execl (). Jak vidíte, zobrazí se správný výsledek.
execlp () Funkce systému:
execl () nepoužívá CESTA proměnná prostředí. K jeho spuštění pomocí execl () je tedy zapotřebí ú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 k jeho spuštění stačí příkaz nebo název souboru, úplná cesta není potřeba.
Syntax:
intexeclp(konst char *soubor, konst char *rozzlobený,...,NULA);Příklad execl () můžeme přepsat pomocí systémové funkce execlp () následovně:
#zahrnoutinthlavní(prázdné) {
char *programName= 'ls';
char *arg1= '-lh';
char *arg2= '/Domov';
execlp(programName,programName,arg1,arg2,NULA);
vrátit se 0;
}
Předal jsem pouze název příkazu ls , ne úplnou cestu / bin / ls . Jak vidíte, mám stejný výstup jako předtím.
execv () Funkce systému:
Ve funkci execl () jsou parametry spustitelného souboru předány funkci jako různé argumenty. Pomocí 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 spustitelného souboru. Jinak funkce execv () funguje stejně jako funkce execl ().
Syntax:
intvykon(konst char *cesta, char *konstargv[]);Příklad execl () můžeme přepsat následujícím způsobem:
#zahrnoutinthlavní(prázdné) {
char *binární cesta= ' / bin / ls';
char *args[] = {binární cesta, '-lh', '/Domov',NULA};
vykon(binární cesta,args);
vrátit se 0;
}
Jak vidíte, dostávám správný výstup.
execvp () Funkce systému:
Funguje stejně jako funkce systému execv (). Je však použita proměnná prostředí PATH. Úplná cesta spustitelného souboru tedy není vyžadována stejně jako v execlp ().
Syntax:
intexecvp(konst char *soubor, char *konstargv[]);Příklad execv () můžeme přepsat takto:
#zahrnoutinthlavní(prázdné) {
char *programName= 'ls';
char *args[] = {programName, '-lh', '/Domov',NULA};
execvp(programName,args);
vrátit se 0;
}
Jak vidíte, je zobrazen správný výstup.
execle () Funkce systému:
Funguje stejně jako execl (), ale můžete s ním poskytnout i vlastní proměnné prostředí. Proměnné prostředí jsou předávány jako pole envp . Poslední prvek souboru envp pole by mělo být NULL. Všechny ostatní prvky obsahují páry klíč – hodnota jako řetězec.
Syntax:
intpopravit(konst char *cesta, konst char *rozzlobený,...,NULA, char * konstenvp[] );Níže je uveden příklad systémové funkce execle ():
#zahrnoutinthlavní(prázdné) {
char *binární cesta= '/bin/bash';
char *arg1= '-C';
char *arg2= 'vyhodil 'Navštivte $ HOSTNAME:$ PORT z vašeho prohlížeče.'';
char *konstenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULA};
popravit(binární cesta,binární cesta,arg1,arg2,NULA,env);
vrátit se 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 .
execve () Funkce systému:
Stejně jako execle () můžete poskytnout své vlastní proměnné prostředí spolu s execve (). Můžete také předat argumenty jako pole, jako jste to udělali v execv ().
Syntax:
intpopravit(konst char *soubor, char *konstargv[], char *konstenvp[]);Příklad execle () lze přepsat následujícím způsobem:
#zahrnoutinthlavní(prázdné) {
char *binární cesta= '/bin/bash';
char *konstargs[] = {binární cesta, '-C', 'vyhodil 'Navštivte $ HOSTNAME:$ PORT
z vašeho prohlížeče.'',NULA};
char *konstenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULA};
popravit(binární cesta,args,env);
vrátit se 0;
}
Jak vidíte, získáme stejný výstup jako v příkladu execle ().
Takže takto používáte rodinu funkcí exec v C pro systémové programování v Linuxu. Děkujeme za přečtení tohoto článku.