C 此示例如何使用dup?

C 此示例如何使用dup?,c,linux,pipe,dup2,dup,C,Linux,Pipe,Dup2,Dup,我一直想创建一个子进程,该子进程分叉两次以创建两个子进程。将其中一个的输出发送到另一个。 我找到了这个示例代码。但我对它的工作原理感到困惑 我找到了一个。但我对dup的使用方式和工作原理感到困惑 i、 e 然后,输出通过管道连接到第二个分叉进程,其管道的连接方式如下: close(0); dup(fd[0]); close(fd[0]); close(fd[1]); 主要的相关行是这些-它们形成了一个标准的习惯用法(但是用dup2(fd[1],1)替换前两行更容易): dup()函数将其参数文

我一直想创建一个子进程,该子进程分叉两次以创建两个子进程。将其中一个的输出发送到另一个。 我找到了这个示例代码。但我对它的工作原理感到困惑

我找到了一个。但我对dup的使用方式和工作原理感到困惑

i、 e

然后,输出通过管道连接到第二个分叉进程,其管道的连接方式如下:

close(0);
dup(fd[0]);
close(fd[0]);
close(fd[1]);

主要的相关行是这些-它们形成了一个标准的习惯用法(但是用
dup2(fd[1],1)
替换前两行更容易):

dup()
函数将其参数文件描述符复制到编号最低的未打开文件描述符。
close()
关闭描述符
1
,描述符
0
仍然打开,因此
dup()
使标准输出
1
指向管道的写入端
fd[1]
。其他两个close调用将正确关闭管道的两端。进程不应该从管道的读取端读取
fd[0]
,标准输出正在写入管道的写入端,因此不再需要其他描述符(如果未关闭,可能会导致问题)

因此,这是将管道的写入端连接到进程的标准输出的标准序列。第二个序列类似,但将管道的读取端连接到标准输入(而不是写入端连接到标准输出)

通常,当将管道的一端连接到标准输入或标准输出时,流程应关闭原始管道的两端


我注意到没有错误检查,尽管不太可能出现任何错误-除非过程在标准输出或标准输入关闭的情况下开始,这与所有合理的预期相反。

主要相关行是这些-它们形成了一个标准习惯用法(但用
dup2(fd[1],1)
替换前两行更容易:

dup()
函数将其参数文件描述符复制到编号最低的未打开文件描述符。
close()
关闭描述符
1
,描述符
0
仍然打开,因此
dup()
生成标准输出
1
引用管道的写入端
fd[1]
。另外两个close调用正确地关闭了管道的两端。进程不应从管道的读取端读取
fd[0]
,标准输出正在写入管道的写入端,因此不再需要另一个描述符(如果未关闭,可能会导致问题)

因此,这是将管道的写入端连接到进程的标准输出的标准序列。第二个序列类似,但将管道的读取端连接到标准输入(而不是将写入端连接到标准输出)

通常,当将管道的一端连接到标准输入或标准输出时,流程应关闭原始管道的两端


我注意到没有错误检查,尽管不太可能出现任何错误-除非与所有合理的预期相反,在标准输出或标准输入关闭的情况下启动流程。

是的,它正是这样做的。
close(1);dup(fd[1]);
序列相当于
dup2(fd[1],1):
。是的,它就是这样做的。
close(1);dup(fd[1]);
序列相当于
dup2(fd[1],1):
close(0);
dup(fd[0]);
close(fd[0]);
close(fd[1]);
close(1);
dup(fd[1]);
close(fd[0]);
close(fd[1]);