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. Začnime teda.
Funkcie systému C v rodine Exec:
V hlavičke sú definované rodiny funkcií exec unistd.h . Takže musíte použiť túto hlavičku v programe C, kde chcete používať tieto funkcie.
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 (súbor const char *, const char *arg, ..., NULL);
- int execv (const char *cesta, char *const argv []);
- int execvp (súbor const char *, char *const argv []);
- int execle (const char *cesta, const char *arg, ..., NULL, char *const envp []);
- int execve (súbor const char *, char *const argv [], char *const envp []);
Pozrime sa, čo každá z týchto funkcií robí a ako ich používať.
execl () Funkcia systému:
V systéme execl () systémová funkcia preberá cestu k spustiteľnému binárnemu súboru (t.j. / bin / ls ) ako prvý a druhý argument. Potom argumenty (t.j. -lh , /Domov ), ktoré chcete prejsť do spustiteľného súboru, za ktorým nasleduje NULOVÝ . Potom systémová funkcia execl () spustí príkaz a vytlačí výstup. Ak sa vyskytne nejaká chyba, potom execl () vráti -1. V opačnom prípade nič nevracia.
Syntax:
intpopraviť(konšt char *cesta, konšt char *nahnevaný,...,NULOVÝ);Príklad systémovej funkcie execl () je uvedený nižšie:
#zahrnúť
intHlavná(prázdny) {
char *binaryPath= ' / bin / ls';
char *arg1= '-lh';
char *arg2= '/Domov';
popraviť(binaryPath,binaryPath,arg1,arg2,NULOVÝ);
vrátiť sa 0;
}
Bežal som ls -lh / domov príkaz pomocou systémovej funkcie execl (). Ako vidíte, zobrazí sa správny výsledok.
execlp () Funkcia systému:
execl () nepoužíva príponu PATH premenná prostredia. Na spustenie pomocou príkazu execl () je teda potrebná úplná cesta k spustiteľnému súboru. execlp () používa premennú prostredia PATH. Ak je teda v PATH 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:
intexeclp(konšt char *súbor, konšt char *nahnevaný,...,NULOVÝ);Príklad execl () pomocou systémovej funkcie execlp () môžeme prepísať nasledovne:
#zahrnúťintHlavná(prázdny) {
char *programName= 'ls';
char *arg1= '-lh';
char *arg2= '/Domov';
execlp(programName,programName,arg1,arg2,NULOVÝ);
vrátiť sa 0;
}
Prešiel som iba názov príkazu ls , nie úplnú cestu / bin / ls . Ako vidíte, dostal som rovnaký výstup ako predtým.
execv () Funkcia systému:
Vo funkcii execl () sú parametre spustiteľného súboru odoslané do funkcie ako rôzne argumenty. S execv () môžete odovzdať všetky parametre v poli zakončenom NULL argv . Prvým prvkom poľa by mala byť cesta k spustiteľnému súboru. V opačnom prípade funkcia execv () funguje rovnako ako funkcia execl ().
Syntax:
intvykon(konšt char *cesta, char *konštargv[]);Príklad execl () môžeme prepísať nasledovne:
#zahrnúťintHlavná(prázdny) {
char *binaryPath= ' / bin / ls';
char *args[] = {binaryPath, '-lh', '/Domov',NULOVÝ};
vykon(binaryPath,args);
vrátiť sa 0;
}
Ako vidíte, dostávam správny výstup.
execvp () Funkcia systému:
Funguje rovnako ako systémová funkcia execv (). Ale používa sa premenná prostredia PATH. Úplná cesta spustiteľného súboru sa teda nevyžaduje rovnako ako v execlp ().
Syntax:
intexecvp(konšt char *súbor, char *konštargv[]);Príklad execv () môžeme prepísať nasledovne:
#zahrnúťintHlavná(prázdny) {
char *programName= 'ls';
char *args[] = {programName, '-lh', '/Domov',NULOVÝ};
execvp(programName,args);
vrátiť sa 0;
}
Ako vidíte, zobrazuje sa správny výstup.
execle () Funkcia systému:
Funguje rovnako ako execl (), ale môžete s ním poskytnúť aj vlastné premenné prostredia. Premenné prostredia sa odovzdávajú ako pole envp . Posledný prvok súboru envp pole by malo byť NULL. Všetky ostatné prvky obsahujú ako reťazec páry kľúč-hodnota.
Syntax:
intpopraviť(konšt char *cesta, konšt char *nahnevaný,...,NULOVÝ, char * konštenvp[] );Príklad systémovej funkcie execle () je uvedený nižšie:
#zahrnúťintHlavná(prázdny) {
char *binaryPath= '/bin/bash';
char *arg1= '-c';
char *arg2= 'zahodil 'Navštívte $ HOSTNAME:$ PORT z vášho prehliadača.'';
char *konštenv[] = {'HOSTNAME = www.linuxhint.com', „PORT = 8080“,NULOVÝ};
popraviť(binaryPath,binaryPath,arg1,arg2,NULOVÝ,env);
vrátiť sa 0;
}
Prešiel som dvoma premennými prostredia MENO HOSŤA a PORT do funkcie execle (). Ako vidíte, mám k nim prístup z spustiteľného súboru /bin/bash .
execve () Funkcia systému:
Rovnako ako execle () môžete poskytnúť svoje vlastné premenné prostredia spolu s execve (). Argumenty môžete tiež odosielať ako polia, ako ste to urobili v execv ().
Syntax:
intpopraviť(konšt char *súbor, char *konštargv[], char *konštenvp[]);Príklad execle () je možné prepísať nasledovne:
#zahrnúťintHlavná(prázdny) {
char *binaryPath= '/bin/bash';
char *konštargs[] = {binaryPath, '-c', 'zahodil 'Navštívte $ HOSTNAME:$ PORT
z vášho prehliadača.'',NULOVÝ};
char *konštenv[] = {'HOSTNAME = www.linuxhint.com', „PORT = 8080“,NULOVÝ};
popraviť(binaryPath,args,env);
vrátiť sa 0;
}
Ako vidíte, dostaneme rovnaký výstup ako v príklade execle ().
Takto teda použijete rodinu funkcií exec v C na programovanie systému v Linuxe. Ďakujem za prečítanie tohto článku.