没有错误处理的示例代码
int pipes[2];
pipe(pipes);
int pid = fork();
if (pid == CHILD)
{
close(pipes[0]); //close useless read fd
dup2(STDOUT_FILENO, pipes[1]); //replace default output by writer piped fd
execve(...);
close(pipes[1]); // ??????????
}
else //parent
{
close(pipes[1]); //close useless write fd
dup2(STDIN_FILENO, pipes[0]); //replace default input by reader piped fd
read(pipes[0]..);
close(pipes[0]);
}
在孩子中,我们知道默认输出/输入在程序结束时自动关闭(STDIN_FILENO / STDOUT_FILENO)。
如果我使用dup2()
更改默认输入/输出,我的管道[1]会自动关闭吗?或者我自己做,然后如何做?我认为execve
会阻止我的计划成功。