C Programovanie

Vykonajte systémové volanie v C

Vykonajte systémové volanie v C
Rodina exec má veľa funkcií v jazyku C. Tieto funkcie C sa v zásade používajú na spustenie systémového príkazu v samostatnom procese, ktorým je hlavný program, a na vytlačenie výstupu.

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:

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 ():

#include
 
int 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:

#include
 
int 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:

#include
 
int 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:

#include
 
int 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 ():

#include
 
int 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:

#include
 
int 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.

Trackpad a ukazovateľ myši AppyMouse na obrazovke pre tablety so systémom Windows
Používateľom tabletov často chýba ukazovateľ myši, najmä keď notebooky bežne používajú. Dotykové smartphony a tablety majú veľa výhod a jediným obmedz...
Stredné tlačidlo myši nefunguje v systéme Windows 10
The stredné tlačidlo myši pomáha vám prechádzať dlhé webové stránky a obrazovky s množstvom údajov. Ak sa to zastaví, budete nakoniec používať klávesn...
Ako zmeniť ľavé a pravé tlačidlo myši na počítači so systémom Windows 10
Je úplnou normou, že všetky zariadenia počítačových myší sú ergonomicky navrhnuté pre pravákov. Existujú však dostupné myšacie zariadenia, ktoré sú šp...