Я использую execlp()
для выполнения команд на дочернем процессе и сохранить в трубу, чтобы быть прочитано родителем как таковые, напримерпечати содержимое трубы на экран
int pipefd[2];
if (pipe(pipefd)) {
perror("pipe");
exit(127);
}
if(!fork()){
close(pipefd[0]);
dup2(pipefd[1], 1);
close(pipefd[1]);
execlp("ls", "ls", NULL);
} else {
close(pipefd[1]);
dup2(pipefd[0], 0);
close(pipefd[0]);
execlp("wc", "wc", NULL);
}
В некоторых случаях родители не должны выполнить что угодно, а просто распечатать содержимое канала на экране, как я могу распечатать трубку на экране (возможно, без сохранения в переменной из-за неизвестного размера вывода).