Я не очень уверен, как создать канал между двумя дочерними процессами. Вот как я это сделал:
pipe(&fd[0]); //Create a pipe
proc1 = fork();
//Child process 1
if (proc1 == 0)
{
close(fd[0]); //process1 doenst need to read from pipe
close(STD_INPUT); //prepare for output
dup(fd[1]); //Standard output = fd[1]
close(fd[1]);
execvp(parameter[0], parameter); //Execute the process
}
else
{
proc2 = fork();
if (proc2 == 0)
{
close(fd[1]);
close(STD_OUTPUT);
dup(fd[0]);
close(fd[0]);
execvp(parameter2[0], parameter2);
}
//Parent process
else
{
waitpid(-1, &status, 0); //Wait for the child to be done
}
}
Я пытаюсь перенаправить вывод одного дочернего процесса на другой, но мне кажется, что я делаю ошибку с каналом во втором дочернем процессе, потому что при запуске программы со вторым дочерним процессом я получаю неверные результаты (например, простое выполнение, такое как «ls», выполняется неправильно), однако, если я удаляю второй дочерний процесс, программа работает нормально (не включая pipe, просто простой fork: ls, ls -l, ps и т. д.).