C Програмування

Exec System Call у C

Exec System Call у C
Сімейство exec має багато функцій в C. Ці функції C в основному використовуються для запуску системної команди в окремому процесі, який виконує основну програму та друкує вихідні дані.

У цій статті я розповім про сімейство функцій exec та покажу вам, як використовувати кожну з цих функцій сімейства exec у C. Отже, давайте почнемо.

Системні функції у сімействі Exec:

Родини функцій exec визначені в заголовку unistd.h. Отже, ви повинні використовувати цей заголовок на програмі C, де ви хочете використовувати ці функції.

Доступні функції exec разом із їх функціональними параметрами наведені нижче:

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

Функція системи 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. Дякуємо, що прочитали цю статтю.

SuperTuxKart for Linux
SuperTuxKart is a great title designed to bring you the Mario Kart experience free of charge on your Linux system. It is pretty challenging and fun to...
Battle for Wesnoth Tutorial
The Battle for Wesnoth is one of the most popular open source strategy games that you can play at this time. Not only has this game been in developmen...
0 A.D. Tutorial
Out of the many strategy games out there, 0 A.D. manages to stand out as a comprehensive title and a very deep, tactical game despite being open sourc...