Книга: Программирование для Linux. Профессиональный подход

Листинг 3.4. (fork-exec.с) Совместное использование функций fork() и exec()

Листинг 3.4. (fork-exec.с) Совместное использование функций fork() и exec()

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
/* Запуск дочернего процесса в виде новой программы. Параметр
   PROGRAM — это имя вызываемой программы; ее поиск будет
   осуществляться в каталогах, определяемых переменной среды PATH.
   Параметр ARG_LIST -- это список строковых аргументов,
   передаваемых программе (должен оканчиваться указателем NULL).
   Функция возвращает идентификатор порожденного процесса. */
int spawn(char* program, char** arg_list) {
 pid_t child_pid;
 /* Создание копии текущего процесса. */
 child_pid = fork();
 if (child_pid != 0)
  /* Это родительский процесс. */
  return child_pid;
 else {
  /* Выполнение указанной программы. */
  execvp(program, arg_list);
  /* Функция execvp() возвращает значение только в случае
    ошибки. */
  fprintf(stderr, "an error occurred in execvpn");
  abort();
 }
}
int main() {
 /* Список аргументов, передаваемых команде ls. */
 char* arg_list[] = {
  "ls", /* argv[0] -- имя программы. */
  "-l",
  NULL /* Список аргументов должен оканчиваться указателем
          NULL. */
 };
 /* Порождаем дочерний процесс, который выполняет команду ls.
    Игнорируем возвращаемый идентификатор дочернего процесса. */
 spawn("ls", arg_list);
 printf("done with main programn");
 return 0;
}

Оглавление книги


Генерация: 1.526. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз