C programavimas

„Exec“ sistemos iškvietimas C

„Exec“ sistemos iškvietimas C
Exec šeima turi daug funkcijų C. Šios C funkcijos iš esmės yra naudojamos sistemos komandai vykdyti atskirame procese, kurį atlieka pagrindinė programa, ir atspausdinti išvestį.

Šiame straipsnyje aš kalbėsiu apie „exec“ funkcijų šeimą ir parodysiu, kaip naudoti kiekvieną iš šių „exec“ šeimos funkcijų C. Taigi, pradėkime.

C sistemos funkcijos „Exec“ šeimoje:

„Exec“ funkcijų šeimos yra apibrėžtos antraštėje unistd.h. Taigi, jūs turite naudoti šią antraštę C programoje, kur norite naudoti šias funkcijas.

Galimos „exec“ funkcijos kartu su jų parametrais pateikiamos žemiau:

Pažiūrėkime, ką daro kiekviena iš šių funkcijų ir kaip jomis naudotis.

execl () sistemos funkcija:

Programoje execl () sistemos funkcija eina vykdomojo dvejetainio failo kelią (t.e. / bin / ls) kaip pirmą ir antrą argumentą. Tada argumentai (t.e. -lh, /namai), kurį norite perduoti vykdomajam failui ir po jo NULL. Tada sistemos funkcija „execl ()“ paleidžia komandą ir išspausdina išvestį. Jei įvyksta kokių nors klaidų, „execl“) grąžina -1. Priešingu atveju jis nieko negrąžina.

Sintaksė:

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

Žemiau pateikiamas sistemos funkcijos „execl ()“ pavyzdys:

# įtraukti
 
int main (negaliojantis)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ namai";
 
execl (binaryPath, binaryPath, arg1, arg2, NULL);
 
grąžinti 0;

Aš paleidau ls-l / namai komandą naudojant sistemos funkciją execl (). Kaip matote, rodomas teisingas rezultatas.

execlp () sistemos funkcija:

„execl“) nenaudoja KELIS aplinkos kintamasis. Taigi, norint paleisti jį su „execl (“), reikalingas visas vykdomojo failo kelias. execlp () naudoja PATH aplinkos kintamąjį. Taigi, jei PATH yra vykdomasis failas ar komanda, tada norint paleisti pakanka komandos arba failo pavadinimo, viso kelio nereikia.

Sintaksė:

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

Execl () pavyzdį galime perrašyti naudodamiesi sistemos funkcija execlp () taip:

# įtraukti
 
int main (negaliojantis)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ namai";
 
execlp (programos pavadinimas, programos pavadinimas, arg1, arg2, NULL);
 
grąžinti 0;

Aš perėjau tik komandos pavadinimą ls, ne visas kelias / bin / ls. Kaip matote, gavau tą patį išėjimą kaip ir anksčiau.

execv () sistemos funkcija:

Funkcijoje execl () vykdomojo failo parametrai perduodami funkcijai kaip skirtingi argumentai. Naudodami „execv“), galite perduoti visus parametrus NULL nutraukiamoje masyvo dalyje argv. Pirmasis masyvo elementas turėtų būti vykdomojo failo kelias. Kitu atveju funkcija „execv ()“ veikia kaip ir „execl“).

Sintaksė:

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

Execl () pavyzdį galime perrašyti taip:

# įtraukti
 
int main (negaliojantis)
char * binaryPath = "/ bin / ls";
char * args [] = dvejetainis kelias, "-lh", "/ namai", NULL;
 
execv (binaryPath, args);
 
grąžinti 0;

Kaip matote, gaunu teisingą išvestį.

execvp () sistemos funkcija:

Veikia taip pat, kaip sistemos „execv“) funkcija. Tačiau naudojamas PATH aplinkos kintamasis. Taigi, viso vykdomojo failo kelio nereikia, kaip ir execlp ().

Sintaksė:

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

Execv () pavyzdį galime perrašyti taip:

# įtraukti
 
int main (negaliojantis)
char * programName = "ls";
char * args [] = programosPavadinimas, "-lh", "/ namai", NULL;
 
execvp (programos pavadinimas, argumentai);
 
grąžinti 0;

Kaip matote, rodoma teisinga išvestis.

„execle“) sistemos funkcija:

Veikia kaip ir „execl“), tačiau kartu su juo galite pateikti ir savo aplinkos kintamuosius. Aplinkos kintamieji perduodami kaip masyvas envp. Paskutinis elementas envp masyvas turėtų būti NULL. Visuose kituose elementuose raktų ir verčių poros yra eilutės.

Sintaksė:

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

Žemiau pateikiamas sistemos „execle ()“ pavyzdys:

# įtraukti
 
int main (negaliojantis)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" Naršyklėje apsilankykite „$ HOSTNAME: $ PORT“.„“;
char * const env [] = "HOSTNAME = www.linuxhint.com "," Uostas = 8080 ", NULL;
 
execle (binaryPath, binaryPath, arg1, arg2, NULL, env);
 
grąžinti 0;

Aš išlaikiau du aplinkos kintamuosius HOSTNAME ir Uostas į „execle“) funkciją. Kaip matote, aš galiu juos pasiekti iš vykdomojo failo / bin / bash.

Execve () Sistemos funkcija:

Kaip ir „execle“ (), taip pat galite pateikti savo aplinkos kintamuosius kartu su „execve“). Taip pat galite perduoti argumentus kaip masyvus, kaip tai darėte execv ().

Sintaksė:

int vykdyti (const char * failas, char * const argv [], char * const envp []);

„Execle“ () pavyzdį galima perrašyti taip:

# įtraukti
 
int main (negaliojantis)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Aplankykite $ HOSTNAME: $ PORT
iš savo naršyklės."", NULL;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
 
vykdyti (binaryPath, args, env);
 
grąžinti 0;

Kaip matote, gauname tą pačią išvestį kaip ir pavyzdyje „execle“).

Taigi, taip naudojate „exec“ funkcijų šeimą C sistemoje programuodami „Linux“. Dėkojame, kad perskaitėte šį straipsnį.

„Battle for Wesnoth“ pamoka
„Battle for Wesnoth“ yra vienas populiariausių atvirojo kodo strateginių žaidimų, kurį šiuo metu galite žaisti. Šis žaidimas ne tik buvo kuriamas laba...
0 A.D. Pamoka
Iš daugybės strateginių žaidimų 0 A.D. sugeba išsiskirti kaip išsamus pavadinimas ir labai gilus, taktinis žaidimas, nepaisant to, kad yra atviro kodo...
„Unity3D“ pamoka
Įvadas į „Unity 3D“ „Unity 3D“ yra galingas žaidimų kūrimo variklis. Tai yra daugiašalė platforma, kuri leidžia kurti žaidimus mobiliesiems, interneti...