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čiintglavni(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čiintglavni(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čiintglavni(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čiintglavni(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čiintglavni(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.