У цій статті я розповім про сімейство функцій exec та покажу вам, як використовувати кожну з цих функцій сімейства exec у C. Отже, давайте почнемо.
Системні функції у сімействі Exec:
Родини функцій exec визначені в заголовку unistd.h. Отже, ви повинні використовувати цей заголовок на програмі C, де ви хочете використовувати ці функції.
Доступні функції exec разом із їх функціональними параметрами наведені нижче:
- int execl (const char * path, const char * arg,…, NULL);
- int execlp (файл const char *, const char * arg,…, NULL);
- int execv (const char * path, char * const argv []);
- int execvp (файл const char *, char * const argv []);
- int execle (const char * path, const char * arg,…, NULL, char * const envp []);
- int execve (файл const char *, char * const argv [], char * const envp []);
Давайте подивимося, що робить кожна з цих функцій і як ними користуватися.
Функція системи execl ():
У execl () системна функція бере шлях до виконуваного двійкового файлу (тобто.e. / bin / ls) як перший і другий аргумент. Потім аргументи (i.e. -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 *, const char * arg,…, NULL);Ми можемо переписати приклад execl (), використовуючи системну функцію execlp (), наступним чином:
#включатиint main (void)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ дім";
execlp (programName, programName, arg1, arg2, NULL);
повернути 0;
Я передав лише ім'я команди ls, не повний шлях / bin / ls. Як бачите, я отримав такий самий результат, як і раніше.
Функція системи execv ():
У функції execl () параметри виконуваного файлу передаються функції як різні аргументи. За допомогою execv () ви можете передавати всі параметри в масив із закінченням NULL argv. Першим елементом масиву повинен бути шлях до виконуваного файлу. В іншому випадку функція execv () працює так само, як функція execl ().
Синтаксис:
int execv (const char * path, char * const argv []);Ми можемо переписати приклад execl () таким чином:
#включатиint main (void)
char * binaryPath = "/ bin / ls";
char * args [] = binaryPath, "-lh", "/ home", NULL;
execv (binaryPath, args);
повернути 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;
Я передав дві змінні середовища ІМЯ ГОСПОДА і ПОРТ до функції 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 (binaryPath, args, env);
повернути 0;
Як бачите, ми отримуємо той самий результат, що і в прикладі execle ().
Отже, ось як ви використовуєте сімейство функцій exec в C для системного програмування в Linux. Дякуємо, що прочитали цю статтю.