exec() показан в листинге 3.2.

//Лис тинг 3.2. Использование системных функций fork() и exec()

RtValue = fork();

if(RtValue == 0){

execl('/path/direct»,«direct»,'.»);

}

В листинге 3.2 демонстрируется вызов функции fork(). Значение, которое она возвращает, сохраняется в переменной RtValue. Если значение RtValue равно 0, значит, это — сыновний процесс, и в нем вызывается функция execl() с параметрами. Первый параметр содержит путь к выполняемому модулю, второй — инструкцию для выполнения, а третий — аргумент. Второй параметр, direct, представляет собой имя утилиты, которая перечисляет все каталоги и подкаталоги из данного каталога. Всего существует шесть версий функций exec, предназначенных для использования различных соглашений о вызовах.

Функции execl ()

Функции execl (), execle () и execlp () передают аргументы командной строки в виде списка. Количество аргументов командной строки должно быть известно во время компиляции.

• int execl(const char *path,const char *arg0,.../*,(char * )0 */);

Здесь path — путевое имя выполняемой программы. Его можно задать в виде полного составного имени либо относительного составного имени из текущего каталога. Последующие параметры представляют собой список аргументов командной строки, от arg0 до argn. Всего может быть n аргументов. Этот список завершается NULL -указателем.

• int execle(const char *path,const char *arg0,.../*,(char *)0 *, char *const envp[]*/);

Эта функция аналогична функции execl () с одним отличием: она имеет дополнительный параметр, envp []. Этот параметр указывает на новую среду для нового процесса, т.е. envp[] — это указатель на строковый массив с завершающим нулевым символом. Каждая его строка, также завершающаяся нулевым символом, имеет следующую форму:

name=value

Здесь name — имя переменной среды, а value — сохраняемая строка. Значение параметру envp [] можно присвоить следующим образом:

char *const envp[] = {«PATH=/opt/kde2:/sbin», «HOME=/home»,NULL};

Здесь PATH и НОМЕ — переменные среды.

• int execlp(const char *file,const char *arg0,.../*, (char *)0 */);

Здесь file — имя выполняемой программы. Для определения местоположения выполняемых программ используется переменная среды PATH. Остальные параметры представляют собой список аргументов командной строки (см. описание функции execl() ) .

Вот примеры применения синтаксиса функций execl () с различными аргументами:

char *const args[] = {«direct»,'.»,NULL};

char *const envp[] = {«files=50»,NULL};

execl('/path/direct», «direct», '.», NULL) ;

execle('/path/direct»,«direct»,'.»,NULL,envp);

execlp(«direct», «direct», ' . ',NULL) ;

Здесь в каждом примере вызова execl -функции активизированный процесс выполняет программу direct.

Синопсис

#include <unistd.h>

int execl(const char *path,const char *arg0,.../*,(char *)0 */);

int execle(const char *path,const char *arg0,.../*,(char *)0 *,char *const envp[]*/);

int execlp(const char *file,const char *arg0,.../*,(char *)0 */);

int execv(const char *path,char *const arg[]);

int execve(const char *path,char *const arg[],char *const envp[]); int execvp(const char *file,char *const arg[]); 

Функции execv ()

Функции execv(), execve() и execvp() передают аргументы командной строки в векторе указателей на строки с завершающим нулевым символом. Количество аргументов командной строки должно быть известно во время компиляции. Элемент argv[0] обычно представляет собой команду.

• int execv(const char *path,char *const arg[]);

Здесь path — путевое имя выполняемой программы. Его можно задать в виде полного составного имени либо относительного составного имени из текущего каталога. Последующий параметр представляет вектор (с завершающим нулевым символом), содержащий аргументы командной строки, представленные в виде строк с завершающими нулевыми символами. Всего может быть n аргументов. Этот вектор завершается NULL-указателем. Элементу arg[] можно присвоить значение таким образом:

char *const arg[] = {«traverse»,'.», '>',«1000»,NULL};

Вот пример вызова этой функции:

execv(«traverse», arg) ;

В этом случае утилита traverse перечислит все файлы в текущем каталоге, размер которых превышает 1000 байт.

• int execve(const char *path,char *const arg[],char *const envp[]);

Эта функция аналогична функции execv(), с одним отличием: она имеет дополнительный параметр, envp [], который описан выше.

• int execvp(const char *file,char *const arg[]);

Здесь file — имя выполняемой программы. Последующий параметр представляет собой вектор (с завершающим нулевым символом), содержащий аргументы командной строки, представленные в виде строк с завершающими нулевыми символами. Всего может быть n аргументов. Этот вектор завершается NULL-указателем.

Вот примеры применения синтаксиса функций execv () с различными аргументами:

char *const arg[] = {«traverse»,'.», '>',«1000»,NULL};

char *const envp[] = {«files=50»,NULL};

execv('/path/traverse», arg);

execve('/path/traverse», arg, envp);

execvp(«traverse», arg);

Здесь в каждом примере вызова execv-функции активизированный процесс выполняет программу traverse.

Определение ограничений для функций exec ()

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату