dup2 () заставляет дочерний процесс рано завершаться

Итак, я пишу программу, которая включает в себя создание 2 наборов каналов, чтобы родительский процесс мог писать в дочерний процесс & дочерний процесс может вернуться назад …

У меня есть следующий код для моего дочернего процесса:

if(pid==0){  //child process
cout << "executing child" << endl;
close(fd1[WRITE_END]);
close(fd2[READ_END]);
if(dup2(fd1[READ_END],STDIN_FILENO) < 0 || dup2(fd2[WRITE_END],STDOUT_FILENO) < 0){
cerr << "dup2 failed" << endl;
exit(1);
}
cout << "test output" << endl;
close(fd2[WRITE_END]);
close(fd1[READ_END]);
read(fd1[READ_END],buf,BUFFER_SIZE);
cout << "Child process read " << buf << endl;
execl("/bin/sort", "sort", "-nr", NULL);} else {  //... parent process

Когда я запускаю свою программу, все, что я получаю в качестве вывода от дочернего процесса, это executing child но нет test output,
Однако когда я удаляю оператор if, обрабатывающий вызовы dup2, мой вывод включает test output,

Любые идеи относительно того, почему dup2 заставляет мой дочерний процесс не заканчиваться?

(и, между прочим, первоначально мои два dup2 были сделаны в отдельных операторах if … когда я помещал результаты теста ниже dup2(fd1[READ_END],STDIN_FILENO) < 0 test, он выводит, но не тогда, когда я ставлю его ниже другого условного теста dup2, поэтому я убежден, что именно в этом моя проблема)

заранее спасибо

0

Решение

Вызов dup2 (fd2 [WRITE_END], STDOUT_FILENO) подключает STDOUT (который используется потоком C ++ Cout) к вашему каналу fd2. Таким образом, «тестовый вывод» записывается в канал.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector