V tomto článku budem hovoriť o rodine funkcií exec a ukážem vám, ako používať každú z týchto funkcií rodiny exec v jazyku C. Takže poďme na to.
Funkcie systému C v rodine Exec:
Skupiny funkcií exec sú definované v hlavičke unistd.h. Takže musíte použiť túto hlavičku v programe C, kde chcete tieto funkcie používať.
Dostupné funkcie exec spolu s ich funkčnými parametrami sú uvedené nižšie:
- int execl (const char * cesta, const char * arg, ..., NULL);
- int execlp (const char * súbor, const char * arg, ..., NULL);
- int execv (const char * cesta, char * const argv []);
- int execvp (const char * súbor, char * const argv []);
- int execle (const char * cesta, const char * arg, ..., NULL, char * const envp []);
- int execve (const char * file, char * const argv [], char * const envp []);
Pozrime sa, čo ktorá z týchto funkcií robí a ako ich používať.
execl () Funkcia systému:
V systéme execl () funkcia systému ide cestou spustiteľného binárneho súboru (t.j.e. / bin / ls) ako prvý a druhý argument. Potom argumenty (t.j.e. -lh, /Domov), ktorý chcete odovzdať spustiteľnému súboru, za ktorým nasleduje NULOVÝ. Potom funkcia systému execl () spustí príkaz a vytlačí výstup. Ak dôjde k chybe, potom execl () vráti -1. V opačnom prípade nič nevráti.
Syntax:
int execl (const char * cesta, const char * arg, ..., NULL);Nižšie je uvedený príklad systémovej funkcie execl ():
#includeint main (void)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ domov";
execl (binaryPath, binaryPath, arg1, arg2, NULL);
návrat 0;
Spustil som ls -lh / domov príkaz pomocou funkcie systému execl (). Ako vidíte, zobrazí sa správny výsledok.
execlp () Funkcia systému:
execl () nepoužíva CESTA premenná prostredia. Na spustenie súboru s execl () je teda potrebná úplná cesta k spustiteľnému súboru. execlp () používa premennú prostredia PATH. Pokiaľ je teda v PATHe k dispozícii spustiteľný súbor alebo príkaz, potom na jeho spustenie stačí príkaz alebo názov súboru, úplná cesta nie je potrebná.
Syntax:
int execlp (const char * súbor, const char * arg, ..., NULL);Príklad systému execl () môžeme prepísať pomocou systémovej funkcie execlp () nasledovne:
#includeint main (void)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ domov";
execlp (programName, programName, arg1, arg2, NULL);
návrat 0;
Len som odovzdal meno príkazu je, nie úplná cesta / bin / ls. Ako vidíte, dostal som rovnaký výstup ako predtým.
Funkcia systému execv ():
Vo funkcii execl () sa parametre spustiteľného súboru odovzdávajú funkcii ako rôzne argumenty. Pomocou execv () môžete odovzdať všetky parametre do poľa ukončeného hodnotou NULL argv. Prvým prvkom poľa by mala byť cesta k spustiteľnému súboru. V opačnom prípade funguje funkcia execv () rovnako ako funkcia execl ().
Syntax:
int execv (const char * cesta, char * const argv []);Príklad execl () môžeme prepísať nasledovne:
#includeint main (void)
char * binaryPath = "/ bin / ls";
char * args [] = binaryPath, "-lh", "/ home", NULL;
execv (binaryPath, args);
návrat 0;
Ako vidíte, dostávam správny výstup.
Funkcia systému execvp ():
Funguje rovnako ako systémová funkcia execv (). Používa sa ale premenná prostredia PATH. Úplná cesta spustiteľného súboru sa teda nevyžaduje rovnako ako v prípade execlp ().
Syntax:
int execvp (súbor const char *, znak * const argv []);Príklad execv () môžeme prepísať nasledovne:
#includeint main (void)
char * programName = "ls";
char * args [] = programName, "-lh", "/ home", NULL;
execvp (programName, args);
návrat 0;
Ako vidíte, zobrazuje sa správny výstup.
Funkcia systému execle ():
Funguje rovnako ako execl (), ale spolu s ním môžete poskytnúť svoje vlastné premenné prostredia. Premenné prostredia sa odovzdávajú ako pole envp. Posledným prvkom envp pole by malo mať hodnotu NULL. Všetky ostatné prvky obsahujú páry kľúč - hodnota ako reťazec.
Syntax:
int execle (const char * cesta, const char * arg, ..., NULL, char * const envp []);Nižšie je uvedený príklad systémovej funkcie execle ():
#includeint main (void)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" Navštívte vo svojom prehliadači $ HOSTNAME: $ PORT.„“;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
execle (binaryPath, binaryPath, arg1, arg2, NULL, env);
návrat 0;
Prešiel som dvoma premennými prostredia MENO HOSŤA a PRÍSTAV do funkcie execle (). Ako vidíte, mám k nim prístup zo spustiteľného súboru / bin / bash.
Funkcia systému execve ():
Rovnako ako execle () môžete poskytnúť svoje vlastné premenné prostredia spolu s execve (). Argumenty môžete tiež odovzdať ako polia, ako ste to urobili v príkazu execv ().
Syntax:
int execve (const char * file, char * const argv [], char * const envp []);Príklad execle () možno prepísať takto:
#includeint main (void)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Navštívte $ HOSTNAME: $ PORT
z vášho prehliadača."", NULOVÝ;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
execve (binaryPath, args, env);
návrat 0;
Ako vidíte, dostaneme rovnaký výstup ako v príklade execle ().
Takto teda používate rodinu funkcií exec v jazyku C na programovanie systému v systéme Linux. Ďakujeme, že ste si prečítali tento článok.