Exec Системно обаждане в C.

Exec System Call C



Фамилията exec има много функции в C. Тези C функции се използват основно за стартиране на системна команда в отделен процес, който основната програма и отпечатване на изхода.

В тази статия ще говоря за семейството на функциите exec и ще ви покажа как да използвате всяка от тези функции на семейството exec в C. И така, нека започнем.







C Системни функции в Exec Family:

Фамилиите exec функции са дефинирани в заглавката unistd.h . Така че, трябва да използвате тази заглавка в програмата C, където искате да използвате тези функции.



Наличните exec функции заедно с техните функционални параметри са дадени по -долу:



  • int execl (const char *път, const char *arg,…, NULL);
  • int execlp (const char *файл, const char *arg,…, NULL);
  • int execv (const char *път, char *const argv []);
  • int execvp (const char *файл, char *const argv []);
  • int execle (const char *пътека, const char *arg,…, NULL, char *const envp []);
  • int execve (const char *файл, char *const argv [], char *const envp []);

Нека да видим какво прави всяка от тези функции и как да ги използваме.





системна функция execl ():

В execl () системната функция поема пътя на изпълнимия двоичен файл (т.е. / bin / ls ) като първи и втори аргумент. След това аргументите (т.е. -ха , /У дома ), който искате да предадете на изпълнимия файл, последван от НУЛА . След това системната функция execl () изпълнява командата и отпечатва изхода. Ако възникне някаква грешка, тогава execl () връща -1. В противен случай не връща нищо.

Синтаксис:

intexecl(const char *път, const char *ядосан,...,НУЛА);

Пример за системната функция execl () е даден по -долу:



#включва

intглавен(невалиден) {
char *binaryPath= ' / bin / ls';
char *arg1= '-hh';
char *arg2= '/У дома';

execl(binaryPath,binaryPath,arg1,arg2,НУЛА);

връщане 0;
}

Аз управлявах ls -lh / home команда, използваща системна функция execl (). Както можете да видите, се показва правилният резултат.

execlp () Системна функция:

execl () не използва ПЪТ променлива на средата. Така че пълният път на изпълнимия файл е необходим, за да се изпълни с execl (). execlp () използва променливата на средата PATH. Така че, ако в PATH е наличен изпълним файл или команда, тогава командата или името на файла са достатъчни за изпълнението им, пълният път не е необходим.

Синтаксис:

intexeclp(const char *файл, const char *ядосан,...,НУЛА);

Можем да пренапишем примера execl (), използвайки системната функция execlp (), както следва:

#включва

intглавен(невалиден) {
char *име на програмата= 'ls';
char *arg1= '-hh';
char *arg2= '/У дома';

execlp(име на програмата,име на програмата,arg1,arg2,НУЛА);

връщане 0;
}

Предадох само името на командата ls , а не пълният път / bin / ls . Както можете да видите, получих същия изход като преди.

execv () Системна функция:

Във функцията execl () параметрите на изпълнимия файл се предават на функцията като различни аргументи. С execv () можете да предадете всички параметри в NULL завършен масив argv . Първият елемент на масива трябва да бъде пътят на изпълнимия файл. В противен случай функцията execv () работи също като функцията execl ().

Синтаксис:

intexecv(const char *път, char *constargv[]);

Можем да препишем примера execl (), както следва:

#включва

intглавен(невалиден) {
char *binaryPath= ' / bin / ls';
char *аргументи[] = {binaryPath, '-hh', '/У дома',НУЛА};

execv(binaryPath,аргументи);

връщане 0;
}

Както можете да видите, получавам правилния изход.

execvp () Системна функция:

Работи по същия начин като системната функция execv (). Използва се обаче променливата на средата PATH. Така че пълният път на изпълнимия файл не се изисква точно както в execlp ().

Синтаксис:

intexecvp(const char *файл, char *constargv[]);

Можем да препишем примера execv (), както следва:

#включва

intглавен(невалиден) {
char *име на програмата= 'ls';
char *аргументи[] = {име на програмата, '-hh', '/У дома',НУЛА};

execvp(име на програмата,аргументи);

връщане 0;
}

Както можете да видите, се показва правилния изход.

execle () Системна функция:

Работи точно като execl (), но можете да предоставите свои собствени променливи на околната среда заедно с него. Променливите на средата се предават като масив envp . Последният елемент на envp масивът трябва да е NULL. Всички останали елементи съдържат двойките ключ-стойност като низ.

Синтаксис:

intекзекъл(const char *път, const char *ядосан,...,НУЛА, char * constenvp[] );

Пример за системната функция execle () е даден по -долу:

#включва

intглавен(невалиден) {
char *binaryPath= '/bin/bash';
char *arg1= '-° С';
char *arg2= 'изхвърлен'Посетете $ HOSTNAME:$ PORT от вашия браузър.'';
char *constenv[] = {„HOSTNAME = www.linuxhint.com“, „ПОРТ = 8080“,НУЛА};

екзекъл(binaryPath,binaryPath,arg1,arg2,НУЛА,env);

връщане 0;
}

Предадох две променливи на средата HOSTNAME и ПОРТ към функцията execle (). Както можете да видите, мога да получа достъп до тях от изпълнимия файл /bin/bash .

execve () Системна функция:

Точно като execle () можете да предоставите свои собствени променливи на околната среда заедно с execve (). Можете също така да предавате аргументи като масиви, както сте направили в execv ().

Синтаксис:

intexecve(const char *файл, char *constargv[], char *constenvp[]);

Примерът execle () може да бъде пренаписан, както следва:

#включва

intглавен(невалиден) {
char *binaryPath= '/bin/bash';
char *constаргументи[] = {binaryPath, '-° С', 'изхвърлен'Посетете $ HOSTNAME:$ PORT
от вашия браузър.'',НУЛА};
char *constenv[] = {„HOSTNAME = www.linuxhint.com“, „ПОРТ = 8080“,НУЛА};

execve(binaryPath,аргументи,env);

връщане 0;
}

Както можете да видите, получаваме същия изход като в примера execle ().

Така че, по този начин използвате семейството на exec функциите в C за системно програмиране в Linux. Благодаря, че прочетохте тази статия.