C 此示例如何使用dup?
我一直想创建一个子进程,该子进程分叉两次以创建两个子进程。将其中一个的输出发送到另一个。 我找到了这个示例代码。但我对它的工作原理感到困惑 我找到了一个。但我对dup的使用方式和工作原理感到困惑 i、 e 然后,输出通过管道连接到第二个分叉进程,其管道的连接方式如下: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()函数将其参数文
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]);