Exec sistemski poziv u C

Exec System Call C

Obitelj exec ima mnogo funkcija u C. Ove se funkcije C u osnovi koriste za pokretanje naredbe sustava u zasebnom procesu koji glavni program i ispisuje izlaz.

U ovom članku govorit ću o obitelji funkcija exec i pokazat ću vam kako koristiti svaku od ovih funkcija obitelji exec u C. Dakle, počnimo.



C Funkcije sustava u Exec obitelji:

Obitelji funkcija exec definirane su u zaglavlju unistd.h . Dakle, morate koristiti ovo zaglavlje u programu C gdje želite koristiti ove funkcije.



Dostupne exec funkcije zajedno sa parametrima funkcija navedene su u nastavku:



  • int execl (const char *put, const char *arg, ..., NULL);
  • int execlp (const char *datoteka, const char *arg,…, NULL);
  • int execv (const char *put, char *const argv []);
  • int execvp (const char *datoteka, char *const argv []);
  • int execle (const char *put, const char *arg,…, NULL, char *const envp []);
  • int execve (const char *datoteka, char *const argv [], char *const envp []);

Pogledajmo što svaka od ovih funkcija radi i kako ih koristiti.

execl () Funkcija sustava:

U execl () sistemska funkcija ide putem izvršne binarne datoteke (tj. / kanta / ls ) kao prvi i drugi argument. Zatim, argumenti (tj. -aha , /Dom ) koju želite proslijediti izvršnoj datoteci, a zatim NULL . Tada sistemska funkcija execl () pokreće naredbu i ispisuje izlaz. Ako dođe do bilo koje pogreške, execl () vraća -1. U protivnom ništa ne vraća.

Sintaksa:

intexecl(konst char *staza, konst char *ljut,...,NULL);

Primjer sistemske funkcije execl () dan je u nastavku:



#uključi

intglavni(poništiti) {
char *binaryPath= ' / bin / ls';
char *arg1= '-lh';
char *arg2= '/Dom';

execl(binaryPath,binaryPath,arg1,arg2,NULL);

povratak 0;
}

Vodio sam ls -lh / dom naredba pomoću sistemske funkcije execl (). Kao što vidite, prikazuje se točan rezultat.

execlp () Funkcija sustava:

execl () ne koristi STAZA varijabla okruženja. Dakle, puna staza izvršne datoteke potrebna je za pokretanje s execl (). execlp () koristi varijablu okruženja PATH. Dakle, ako je izvršna datoteka ili naredba dostupna u PATH -u, tada je naredba ili naziv datoteke dovoljna za njeno pokretanje, puna staza nije potrebna.

Sintaksa:

intexeclp(konst char *datoteka, konst char *ljut,...,NULL);

Primjer execl () možemo prepisati pomoću sistemske funkcije execlp () na sljedeći način:

#uključi

intglavni(poništiti) {
char *programName= 'ls';
char *arg1= '-lh';
char *arg2= '/Dom';

execlp(programName,programName,arg1,arg2,NULL);

povratak 0;
}

Prošao sam samo naziv naredbe ls , a ne puni put / kanta / ls . Kao što vidite, dobio sam isti izlaz kao i prije.

execv () Funkcija sustava:

U funkciji execl () parametri izvršne datoteke prenose se u funkciju kao različiti argumenti. Pomoću execv () možete proslijediti sve parametre u NULL nizu s završetkom argv . Prvi element niza trebao bi biti put izvršne datoteke. Inače, execv () funkcija radi isto kao execl () funkcija.

Sintaksa:

intexecv(konst char *staza, char *konstargv[]);

Primjer execl () možemo prepisati na sljedeći način:

#uključi

intglavni(poništiti) {
char *binaryPath= ' / bin / ls';
char *args[] = {binaryPath, '-lh', '/Dom',NULL};

execv(binaryPath,args);

povratak 0;
}

Kao što vidite, dobivam ispravan izlaz.

execvp () Funkcija sustava:

Radi na isti način kao i funkcija sustava execv (). No, koristi se varijabla okruženja PATH. Dakle, puna staza izvršne datoteke nije potrebna baš kao u execlp ().

Sintaksa:

intexecvp(konst char *datoteka, char *konstargv[]);

Primjer execv () možemo prepisati na sljedeći način:

#uključi

intglavni(poništiti) {
char *programName= 'ls';
char *args[] = {programName, '-lh', '/Dom',NULL};

execvp(programName,args);

povratak 0;
}

Kao što vidite, prikazuje se ispravan izlaz.

Funkcija sustava execle ():

Radi isto kao execl (), ali uz njega možete navesti i vlastite varijable okruženja. Varijable okruženja prosljeđuju se kao niz envp . Posljednji element envp niz bi trebao biti NULL. Svi ostali elementi sadrže parove ključ / vrijednost kao niz.

Sintaksa:

intexecle(konst char *staza, konst char *ljut,...,NULL, char * konstenvp[] );

Primjer funkcije sustava execle () dan je u nastavku:

#uključi

intglavni(poništiti) {
char *binaryPath= '/bin/bash';
char *arg1= '-c';
char *arg2= 'izbaciti 'Posjetite $ HOSTNAME:$ PORT iz vašeg preglednika.'';
char *konstenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULL};

execle(binaryPath,binaryPath,arg1,arg2,NULL,env);

povratak 0;
}

Prošao sam dvije varijable okruženja HOSTNAME i LUKA na funkciju execle (). Kao što vidite, mogu im pristupiti iz izvršne datoteke /bin/bash .

execve () Funkcija sustava:

Baš kao execle (), možete dati i vlastite varijable okruženja zajedno s execve (). Također možete proslijediti argumente kao nizove kao što ste to učinili u execv ().

Sintaksa:

intizvršiti(konst char *datoteka, char *konstargv[], char *konstenvp[]);

Primjer execle () može se prepisati na sljedeći način:

#uključi

intglavni(poništiti) {
char *binaryPath= '/bin/bash';
char *konstargs[] = {binaryPath, '-c', 'izbaciti 'Posjetite $ HOSTNAME:$ PORT
iz vašeg preglednika.'',NULL};
char *konstenv[] = {'HOSTNAME = www.linuxhint.com', 'PORT = 8080',NULL};

izvršiti(binaryPath,args,env);

povratak 0;
}

Kao što vidite, dobivamo isti izlaz kao u primjeru execle ().

Dakle, tako koristite obitelj funkcija exec u C za programiranje sustava u Linuxu. Hvala što ste pročitali ovaj članak.