Можно ли сохранить стандартный вывод в одном процессе, но при этом иметь канал для второго процесса? - PullRequest
0 голосов
/ 20 ноября 2011

Я пытаюсь сделать регистратор для программы. По этой причине у меня есть второй дочерний процесс, который получает stdout родителя через канал и использует tee . Ниже приведен пример сильфона.

if (fork()>0){      //parent

  close(1);
  dup(pip[1]);
  close(pip[0]);

  char a[100]="";
  while (1){
    gets(a);
    puts(a);
  }

} else {           //child

  close(0);
  dup(pip[0]);
  close(pip[1]);

  execlp("tee", "tee", NULL);

}

Это отлично работает. Дочерний печатает все, что я печатаю в родительском, используя трубу.

Однако возможно ли, чтобы родитель отправлял stdout при одновременной отправке в канал?

1 Ответ

1 голос
/ 20 ноября 2011

Проверьте man-страницу для «write», затем вы можете оставить stdout открытым и написать в оба канала:

while(1){
   gets(a)
   write(pip[1], a, len(a))
   puts(a)
}

Хотя вы действительно должны проверять свои возвращаемые значения и все.

...