В тази статия ще говоря за семейството на функциите 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. Благодаря, че прочетохте тази статия.