所以我现在正在编写一个运行三个进程的程序:parse->sort->suppress。'Parse' 是'sort' 的父级,'sort' 是'suppress' 的父级。我不知道排序的代码。我所知道的是它使用标准的 I/O 文件描述符。出于某种原因,'Suppress' 总是得到一个 EOF 字符,因此永远不会结束我的程序,而不会对它在接收到 EOF 字符之前应该得到的数据进行排序处理。
避免我的程序的内部工作(已注释掉)是我如何设置管道的方式。
由于管道设置,我的管道从“排序”到“抑制”是否有原因提前发送 EOF?
int main(int argc, char *argv[])
{
int status1;
int ps_id[2];
//setup parse->sort pipe
if (pipe(ps_id) == -1)
{
perror("ps pipe: ");
exit(EXIT_FAILURE);
}
//sort&suppress
if (!fork())
{
int status2;
int ss_id[2];
//setup sort->suppress pipe
if (pipe(ss_id) == -1)
{
perror("ss pipe: ");
exit(EXIT_FAILURE);
}
//suppress
if (!fork())
{
close(ps_id[0]);
close(ps_id[1]);
close(ss_id[1]);
//do stuff
close(ss_id[0]);
}
//suppress
else
{
close(ps_id[1]);
close(ss_id[0]);
dup2(ps_id[0], 0);
dup2(ss_id[1], 1);
close(ps_id[0]);
close(ss_id[1]);
excel("/bin/sort", "sort", (char*)0);
wait(&status2);
}
}
//parse
else
{
close(ps_id[0]);
//do stuff
close(ps_id[1]);
wait(&status1);
}
}