不知道为什么我的孩子进程正在从管道读取EOF

时间:2013-11-09 22:52:36

标签: c process fork pipe

所以我现在正在编写一个程序,它运行三个进程: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);
}
}

0 个答案:

没有答案