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

Листинг 5.8. (dup2.c) Перенаправление выходного потока канала с помощью функции dup2()

Листинг 5.8. (dup2.c) Перенаправление выходного потока канала с помощью функции dup2()

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
 int fds[2];
 pid_t pid;
 /* Создание канала. Дескрипторы обоих концов канала
    помещаются в массив FDS. */
 pipe (fds);
 /* Создание дочернего процесса. */
 pid = fork();
 if (pid == (pid_t)0) {
  /* Это дочерний процесс. Закрываем копию входного конца
    канала */
  close(fds[1]);
  /* Соединяем выходной конец канала со стандартным входным
     потоком. */
  dup2(fds[0], STDIN_FILENO);
  /* Замещаем дочерний процесс программой sort. */
  execlp("sort", "sort", 0);
 } else {
  /* Это родительский процесс. */
  FILE* stream;
  /* Закрываем копию выходного конца канала. */
  close(fds[0]);
  /* Приводим дескриптор входного конца канала к типу FILE*
     и записываем данные в канал. */
  stream = fdopen(fds[1], "w");
  fprintf(stream, "This is a test.n");
  fprintf(stream, "Hello, world.n");
  fprintf(stream, "My dog has fleas.n");
  fprintf(stream, "This program is great.n");
  fprintf(stream, "One fish, two fish.n");
  fflush(stream);
  close(fds[1]);
  /* Дожидаемся завершения дочернего процесса. */
  waitpid(pid, NULL, 0);
 }
 return 0;
}

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


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