C Programiranje

Izvedite sistemski klic v C

Izvedite sistemski klic v C
Družina exec ima v C veliko funkcij. Te funkcije C se v osnovi uporabljajo za zagon sistemskega ukaza v ločenem postopku, ki glavni program in natisne izhodne podatke.

V tem članku bom govoril o družini funkcij exec in vam pokazal, kako uporabljati vsako od teh funkcij družine exec v C. Torej, začnimo.

C Sistemske funkcije v družini Exec:

Družine funkcij exec so definirane v glavi unistd.h. Torej, morate uporabiti to glavo v programu C, kjer želite uporabljati te funkcije.

Razpoložljive funkcije exec skupaj z njihovimi parametri funkcij so podane spodaj:

Poglejmo, kaj počne vsaka od teh funkcij in kako jih uporabiti.

execl () Sistemska funkcija:

V sistemu execl () sistem zavzame pot izvršljive binarne datoteke (tj.e. / bin / ls) kot prvi in ​​drugi argument. Nato argumenti (tj.e. -lh, / domov), ki ga želite prenesti v izvršljivo datoteko, ki ji sledi NIČ. Nato sistemska funkcija execl () zažene ukaz in natisne izhod. Če pride do kakršne koli napake, execl () vrne -1. V nasprotnem primeru ne vrne ničesar.

Sintaksa:

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

Primer sistemske funkcije execl () je podan spodaj:

#include
 
int main (void)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ domov";
 
execl (binarna pot, binarna pot, arg1, arg2, NULL);
 
vrnitev 0;

Vodil sem ls -lh / domov ukaz z uporabo sistemske funkcije execl (). Kot vidite, se prikaže pravi rezultat.

execlp () Sistemska funkcija:

execl () ne uporablja datoteke POT spremenljivka okolja. Torej je za zagon z execl () potrebna celotna pot izvršljive datoteke. execlp () uporablja spremenljivko okolja PATH. Torej, če je v PATH na voljo izvedljiva datoteka ali ukaz, potem je ukaz ali ime datoteke dovolj za zagon, celotna pot ni potrebna.

Sintaksa:

int execlp (datoteka const char *, const char * arg,…, NULL);

Primer execl () lahko znova uporabimo s sistemsko funkcijo execlp (), kot sledi:

#include
 
int main (void)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ domov";
 
execlp (programName, programName, arg1, arg2, NULL);
 
vrnitev 0;

Predal sem samo ime ukaza ls, ne celotna pot / bin / ls. Kot lahko vidite, sem dobil enake rezultate kot prej.

execv () sistemska funkcija:

V funkciji execl () se parametri izvršljive datoteke funkciji posredujejo kot različni argumenti. Z execv () lahko prenesete vse parametre v NULL zaključeno polje argv. Prvi element polja naj bo pot do izvršljive datoteke. V nasprotnem primeru funkcija execv () deluje tako kot funkcija execl ().

Sintaksa:

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

Primer execl () lahko prepišemo na naslednji način:

#include
 
int main (void)
char * binaryPath = "/ bin / ls";
char * args [] = binaryPath, "-lh", "/ home", NULL;
 
execv (binarna pot, argumenti);
 
vrnitev 0;

Kot lahko vidite, dobim pravi rezultat.

execvp () Sistemska funkcija:

Deluje enako kot sistemska funkcija execv (). Vendar se uporablja spremenljivka okolja PATH. Torej, celotna pot izvršljive datoteke ni potrebna, tako kot v execlp ().

Sintaksa:

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

Primer execv () lahko prepišemo na naslednji način:

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

Kot vidite, se prikaže pravi izhod.

execle () Sistemska funkcija:

Deluje tako kot execl (), vendar lahko skupaj z njim zagotovite tudi svoje spremenljivke okolja. Spremenljivke okolja se posredujejo kot matrika envp. Zadnji element envp polje mora biti NULL. Vsi drugi elementi vsebujejo pare ključ / vrednost kot niz.

Sintaksa:

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

Primer sistemske funkcije execle () je podan spodaj:

#include
 
int main (void)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" V brskalniku obiščite $ HOSTNAME: $ PORT."";
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
 
execle (binarna pot, binarna pot, arg1, arg2, NULL, env);
 
vrnitev 0;

Prenesel sem dve spremenljivki okolja HOSTNAME in PRISTANIŠČE v funkcijo execle (). Kot lahko vidite, do njih lahko dostopam iz izvršljive datoteke / bin / bash.

execve () Sistemska funkcija:

Tako kot execle () lahko skupaj z execve () zagotovite tudi svoje spremenljivke okolja. Argumente lahko posredujete tudi kot nize, kot ste storili v execv ().

Sintaksa:

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

Primer execle () je mogoče prepisati na naslednji način:

#include
 
int main (void)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Obiščite $ HOSTNAME: $ PORT
v brskalniku."", NIČ;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
 
execve (binarna pot, args, env);
 
vrnitev 0;

Kot lahko vidite, dobimo enak izhod kot v primeru execle ().

Torej, tako uporabljate družino funkcij exec v C za sistemsko programiranje v Linuxu. Hvala, ker ste prebrali ta članek.

Kako razviti igro na Linuxu
Pred desetletjem le malo uporabnikov Linuxa napoveduje, da bo njihov najljubši operacijski sistem nekoč priljubljena igralna platforma za komercialne ...
Odprtokodna vrata komercialnih igralnih sistemov
Brezplačne, odprtokodne in medplatformacijske igre, ki jih lahko uporabite za igranje starih, pa tudi nekaterih dokaj nedavnih naslovov iger. V tem čl...
Najboljše igre ukazne vrstice za Linux
Ukazna vrstica ni le vaš največji zaveznik pri uporabi Linuxa - lahko je tudi vir zabave, saj jo lahko uporabljate za igranje številnih zabavnih iger,...