所以我现在正在编写一个程序,它运行三个进程:parse-> sort-> suppress。 'Parse'是'sort'的父级,'sort'是'suppress'的父级。我不知道排序的代码。我所知道的是它使用标准的I / O文件描述符。出于某种原因,'Suppress'总是得到一个EOF字符,因此永远不会结束我的程序而不对它在收到EOF字符之前应该得到的数据进行排序处理。
在这里避免我的程序的内部工作(注释掉)是我如何设置管道。
由于管道安装,我的管道从'sort'到'suppress'是否过早地发送了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);
}
}