如何正确使用dup2/close连接这三个进程?

如何正确使用dup2/close连接这三个进程?,c,fork,pipe,dup2,C,Fork,Pipe,Dup2,我正在尝试正确连接三个进程,以便允许它们之间的进程间通信。我有一个进程scanner,它接受父级的STDIN,然后处理流中的单词。如果单词长度是奇数,它将发送到一个进程,如果是偶数,它将发送到另一个进程。这些进程应该通过STDIN(我假设)接收这些单词,然后通过STDOUT将一些信息输出回scanner进程。偶数/奇数的STDOUT应该被重定向到scanner,然后scanner将读取(使用read),然后输出/处理单词。这是一项学术活动,不是实践活动。下面是它的图片: 下面是我的代码当前的样

我正在尝试正确连接三个进程,以便允许它们之间的进程间通信。我有一个进程scanner,它接受父级的STDIN,然后处理流中的单词。如果单词长度是奇数,它将发送到一个进程,如果是偶数,它将发送到另一个进程。这些进程应该通过STDIN(我假设)接收这些单词,然后通过STDOUT将一些信息输出回scanner进程。偶数/奇数的STDOUT应该被重定向到scanner,然后scanner将读取(使用read),然后输出/处理单词。这是一项学术活动,不是实践活动。下面是它的图片:

下面是我的代码当前的样子。问题是我不太确定要复制什么和关闭什么。一旦我明白了,我就可以走了!如有任何建议,将不胜感激

文件描述符:

int scannertoeven[2]; int scannertoodd[2];
int eventoscanner[2]; int oddtoscanner[2];
//Pipe stuff here (ommitted)
代码:


不确定逻辑。但是您使用dup2的方式不正确

“偶数”过程中的以下代码:

应该是:

dup2(scannertoeven[0], STDIN_FILENO);
// You should close scannertoeven[0], not STDIN. After this dup2, the even
// process will receive input from scannertoeven[0]
close(scannertoeven[0]);
// Note the the scannertoeven[0] is not "really" closed, just that the file
// is "attached" to STDIN

dup2(eventoscanner[1], STDOUT_FILENO);
// Same as above. After this dup2, all the even process's output will go
// to eventoscanner[1]
close(eventoscanner[1]);
与“奇数”过程相同


这是,供您参考。

无需关闭要替换的文件描述符。dup2函数关闭与第二个参数对应的描述符,然后将与第一个参数对应的条目复制到与第二个参数对应的条目中。
close(STDIN_FILENO);
dup2(scannertoeven[0], STDIN_FILENO);
close(STDOUT_FILENO);
dup2(eventoscanner[1], STDOUT_FILENO);
dup2(scannertoeven[0], STDIN_FILENO);
// You should close scannertoeven[0], not STDIN. After this dup2, the even
// process will receive input from scannertoeven[0]
close(scannertoeven[0]);
// Note the the scannertoeven[0] is not "really" closed, just that the file
// is "attached" to STDIN

dup2(eventoscanner[1], STDOUT_FILENO);
// Same as above. After this dup2, all the even process's output will go
// to eventoscanner[1]
close(eventoscanner[1]);