Программирование на C

Системный вызов Exec на C

Системный вызов Exec на C
Семейство exec имеет множество функций в C. Эти функции C в основном используются для запуска системной команды в отдельном процессе, который основная программа и печать вывода.

В этой статье я расскажу о семействе функций exec и покажу вам, как использовать каждую из этих функций семейства exec в C. Итак, приступим.

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

Семейства функций exec определены в заголовке unistd.час. Итак, вы должны использовать этот заголовок в программе на C, где вы хотите использовать эти функции.

Доступные функции exec вместе с их параметрами функций приведены ниже:

Давайте посмотрим, что делает каждая из этих функций и как их использовать.

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

В execl () системная функция принимает путь к исполняемому двоичному файлу (i.е. / bin / ls) как первый и второй аргумент. Тогда аргументы (i.е. -lh, /дом), который вы хотите передать исполняемому файлу, за которым следует НОЛЬ. Затем системная функция execl () запускает команду и выводит результат. Если возникает какая-либо ошибка, execl () возвращает -1. В противном случае он ничего не возвращает.

Синтаксис:

int execl (const char * путь, const char * arg,…, NULL);

Пример системной функции execl () приведен ниже:

#включать
 
int main (void)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ дом";
 
execl (binaryPath, binaryPath, arg1, arg2, NULL);
 
возврат 0;

Я запустил ls -lh / home команда с использованием системной функции execl (). Как видите, отображается правильный результат.

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

execl () не использует ДОРОЖКА переменная окружения. Итак, полный путь к исполняемому файлу требуется для его запуска с помощью execl (). execlp () использует переменную среды PATH. Итак, если исполняемый файл или команда доступны в PATH, то команды или имени файла достаточно для ее запуска, полный путь не требуется.

Синтаксис:

int execlp (const char * file, const char * arg,…, NULL);

Мы можем переписать пример execl (), используя системную функцию execlp () следующим образом:

#включать
 
int main (void)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ дом";
 
execlp (имя_программы, имя_программы, аргумент1, аргумент2, NULL);
 
возврат 0;

Я передал только имя команды ls, не полный путь / bin / ls. Как видите, я получил тот же результат, что и раньше.

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

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

Синтаксис:

int execv (const char * путь, char * const argv []);

Мы можем переписать пример execl () следующим образом:

#включать
 
int main (void)
char * binaryPath = "/ bin / ls";
char * args [] = двоичный путь, «-lh», «/ home», NULL;
 
execv (двоичный путь, аргументы);
 
возврат 0;

Как видите, я получаю правильный результат.

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

Работает так же, как системная функция execv (). Но используется переменная среды PATH. Таким образом, полный путь к исполняемому файлу не требуется, как в execlp ().

Синтаксис:

int execvp (const char * файл, char * const argv []);

Мы можем переписать пример execv () следующим образом:

#включать
 
int main (void)
char * programName = "ls";
char * args [] = имя программы, "-lh", "/ home", NULL;
 
execvp (имя программы, аргументы);
 
возврат 0;

Как видите, отображается правильный вывод.

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

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

Синтаксис:

int execle (const char * path, const char * arg,…, NULL, char * const envp []);

Пример системной функции execle () приведен ниже:

#включать
 
int main (void)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" Посетите $ HOSTNAME: $ PORT из вашего браузера."";
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
 
execle (binaryPath, binaryPath, arg1, arg2, NULL, env);
 
возврат 0;

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

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

Как и execle (), вы можете предоставить свои собственные переменные среды вместе с execve (). Вы также можете передавать аргументы в виде массивов, как в execv ().

Синтаксис:

int execve (const char * файл, char * const argv [], char * const envp []);

Пример с execle () можно переписать следующим образом:

#включать
 
int main (void)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Посетить $ HOSTNAME: $ PORT
из вашего браузера."", НОЛЬ;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PORT = 8080 ", NULL;
 
execve (двоичный путь, аргументы, env);
 
возврат 0;

Как видите, мы получаем тот же результат, что и в примере с execle ().

Итак, вот как вы используете семейство функций exec в C для системного программирования в Linux. Спасибо, что прочитали эту статью.

Как загрузить и играть в Sid Meier's Civilization VI в Linux
Введение в игру Civilization 6 - это современный подход к классической концепции, представленной в серии игр Age of Empires. Идея была довольно просто...
Как установить Doom и играть в него в Linux
Введение в Doom Серия Doom возникла в 90-х годах после выхода оригинальной Doom. Это мгновенно стал хитом, и с тех пор серия игр получила множество на...
Vulkan для пользователей Linux
С каждым новым поколением видеокарт мы видим, как разработчики игр расширяют границы графической точности и приближаются на шаг ближе к фотореализму. ...