1

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

0 回答 0