如果在fork()之后使用execv(),子进程是否可以访问管道?

如果在fork()之后使用execv(),子进程是否可以访问管道?,c,operating-system,pipe,exec,fork,C,Operating System,Pipe,Exec,Fork,我知道,就在fork()调用之前,子进程与父进程具有完全相同的文件描述符表副本。假设我在fork()调用之前打开一个管道 假设child是我的子进程,那么在父进程和子进程之间使用管道是否合法?(这是我代码的实际部分) 我的程序在执行时“冻结”,当我使用SIGTSTP时,我得到/sysdeps/nptl/fork.c——没有这样的文件或目录。父目录和子目录都在同一个目录中。这里有什么问题?这只是代码的一部分,因此我只能猜测。如果创建管道,则始终需要读卡器和写卡器。在你的样本中,我们只看到了作者 您

我知道,就在fork()调用之前,子进程与父进程具有完全相同的文件描述符表副本。假设我在fork()调用之前打开一个管道

假设child是我的子进程,那么在父进程和子进程之间使用管道是否合法?(这是我代码的实际部分)


我的程序在执行时“冻结”,当我使用SIGTSTP时,我得到/sysdeps/nptl/fork.c——没有这样的文件或目录。父目录和子目录都在同一个目录中。这里有什么问题?

这只是代码的一部分,因此我只能猜测。如果创建管道,则始终需要读卡器和写卡器。在你的样本中,我们只看到了作者

您通常在子级中执行的操作是通过管道将其连接到父级,覆盖其stdin/out。关闭其标准输入/输出并复制管道的FD,如下所示:

close(0);
dup(in);   // reading end of input pipe
close(in); // close unused fd
close(1);
dup(out);  // writing end of output pipe
close(out);// close unused fd

这些管道的另一端分别在父管道中处理。

这是伪代码吗?因为如果您使用
fd
调用,然后将
fd
用作数组数组,则效果不太好。通常还会关闭每个进程中未使用的文件描述符。@JoachimPileborg编辑了代码区域。我盲目地复制了代码的一部分,没有意识到这会造成混乱。我建议您学习如何创建,并注意这样的MCVE应该包含变量声明(否则它将不完整)。不要忘记在
dup
之后关闭
in
out
,特别是如果它们是管道描述符。。。
close(0);
dup(in);   // reading end of input pipe
close(in); // close unused fd
close(1);
dup(out);  // writing end of output pipe
close(out);// close unused fd