Šajā rakstā es runāšu par exec funkciju grupām un parādīšu, kā izmantot katru no šīm exec ģimenes funkcijām C. Tātad, sāksim darbu.
C sistēmas funkcijas Exec ģimenē:
Exec funkciju saimes ir definētas galvenē unistd.h. Tātad, jums ir jāizmanto šī galvene programmā C, kur vēlaties izmantot šīs funkcijas.
Zemāk ir norādītas pieejamās exec funkcijas kopā ar to parametriem:
- int execl (const char * ceļš, const char * arg,…, NULL);
- int execlp (const char * fails, const char * arg,…, NULL);
- int execv (const char * ceļš, char * const argv []);
- int execvp (const char * fails, char * const argv []);
- int execle (const char * ceļš, const char * arg,…, NULL, char * const envp []);
- int izpildīt (const char * fails, char * const argv [], char * const envp []);
Apskatīsim, ko dara katra no šīm funkcijām un kā tās izmantot.
execl () Sistēmas funkcija:
Programmā execl () sistēmas funkcija aizņem izpildāmā binārā faila ceļu (t.i.e. / bin / ls) kā pirmo un otro argumentu. Tad argumenti (t.i.e. -lh, /mājas), kuru vēlaties nodot izpildāmajam failam, kam seko NULL. Tad sistēmas funkcija execl () palaiž komandu un izdrukā izvadi. Ja rodas kāda kļūda, tad execl () atgriež -1. Pretējā gadījumā tas neko neatgriež.
Sintakse:
int execl (const char * ceļš, const char * arg,…, NULL);Zemāk ir sniegts sistēmas funkcijas execl () piemērs:
# iekļautint main (void)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ mājas";
execl (binaryPath, binaryPath, arg1, arg2, NULL);
atgriešanās 0;
Es vadīju ls -lh / mājas komandu, izmantojot sistēmas funkciju execl (). Kā redzat, tiek parādīts pareizs rezultāts.
execlp () Sistēmas funkcija:
execl () neizmanto CELS vides mainīgais. Tātad, lai palaistu ar execl (), ir nepieciešams pilns izpildāmā faila ceļš. execlp () izmanto vides mainīgo PATH. Tātad, ja PATH ir pieejams izpildāms fails vai komanda, tad lai palaistu, pietiek ar komandu vai faila nosaukumu, pilns ceļš nav nepieciešams.
Sintakse:
int execlp (const char * fails, const char * arg,…, NULL);Execl () piemēru mēs varam pārrakstīt, izmantojot sistēmas funkciju execlp () šādi:
# iekļautint main (void)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ mājas";
execlp (programmas nosaukums, programmas nosaukums, arg1, arg2, NULL);
atgriešanās 0;
Es izturēju tikai komandas nosaukumu ls, nevis pilnu ceļu / bin / ls. Kā redzat, es saņēmu tādu pašu izvadi kā iepriekš.
execv () Sistēmas funkcija:
Funkcijā execl () izpildāmā faila parametri tiek nodoti funkcijai kā dažādi argumenti. Izmantojot execv (), jūs varat nodot visus parametrus NULL izbeigtajā masīvā argv. Masīva pirmajam elementam jābūt izpildāmā faila ceļam. Pretējā gadījumā funkcija execv () darbojas tāpat kā execl () funkcija.
Sintakse:
int execv (const char * ceļš, char * const argv []);Execl () piemēru mēs varam pārrakstīt šādi:
# iekļautint main (void)
char * binaryPath = "/ bin / ls";
char * args [] = binārāPath, "-lh", "/ home", NULL;
execv (binaryPath, args);
atgriešanās 0;
Kā redzat, es saņemu pareizu rezultātu.
execvp () Sistēmas funkcija:
Darbojas tāpat kā sistēmas execv () funkcija. Bet tiek izmantots vides mainīgais PATH. Tātad izpildāmā faila pilns ceļš nav nepieciešams tāpat kā execlp ().
Sintakse:
int execvp (const char * fails, char * const argv []);Execv () piemēru mēs varam pārrakstīt šādi:
# iekļautint main (void)
char * programName = "ls";
char * args [] = programmasNosaukums, "-lh", "/ mājas", NULL;
execvp (programmas nosaukums, args);
atgriešanās 0;
Kā redzat, tiek parādīta pareizā izeja.
execle () Sistēmas funkcija:
Darbojas tāpat kā execl (), bet kopā ar to varat norādīt arī savus vides mainīgos. Vides mainīgie tiek nodoti kā masīvs envp. Pēdējais envp masīvam jābūt NULL. Visos pārējos elementos atslēgas vērtību pāri ir kā virkne.
Sintakse:
int execle (const char * ceļš, const char * arg,…, NULL, char * const envp []);Zemāk ir sniegts execle () sistēmas funkcijas piemērs:
# iekļautint main (void)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" Pārlūkprogrammā apmeklējiet vietni $ HOSTNAME: $ PORT."";
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
execle (binaryPath, binaryPath, arg1, arg2, NULL, env);
atgriešanās 0;
Es izturēju divus vides mainīgos HOSTNAME un OSTA uz funkciju execle (). Kā redzat, es tiem varu piekļūt no izpildāmā faila / bin / bash.
execve () Sistēmas funkcija:
Tāpat kā execle (), jūs varat sniegt savus vides mainīgos kopā ar execve (). Varat arī nodot argumentus kā masīvus, kā jūs to darījāt execv ().
Sintakse:
int izpildīt (const char * fails, char * const argv [], char * const envp []);Execle () piemēru var pārrakstīt šādi:
# iekļautint main (void)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Apmeklējiet vietni $ HOSTNAME: $ PORT
no sava pārlūka."", NULL;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
izpildīt (binaryPath, args, env);
atgriešanās 0;
Kā redzat, mēs iegūstam tādu pašu rezultātu kā execle () piemērā.
Tātad, tā jūs izmantojat exec funkciju saimi C, lai programmētu sistēmu Linux. Paldies, ka izlasījāt šo rakstu.