Exec System Call v C

Exec System Call C

Rodina exec má mnoho funkcí v C. Tyto funkce C se v zásadě používají ke spuštění systémového příkazu v samostatném procesu, který hlavní program a tisk 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. 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ě:

#zahrnout

inthlavní(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:

#zahrnout

inthlavní(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:

#zahrnout

inthlavní(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 ():

#zahrnout

inthlavní(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:

#zahrnout

inthlavní(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.