有谁知道我应该如何关闭文件描述符,让我的管道正常工作?

时间:2017-03-09 13:41:40

标签: pipe fork children file-descriptor dup

int main()
{
int x=10,y=20,z=0, p1[2], p2[2]; pipe(p1); pipe(p2);

if(!fork())
{
    close(p1[1]); close(p2[0]);
    while(read(p1[0],&z,sizeof(int)))
    {
        z=z*3;write(p2[1],&z,sizeof(int));
    }
    close(p1[0]); close(p2[1]); 
    if(!fork())
    {
        close(p2[1]); close(p1[0]); close(p1[1]);
        while(read(p2[0],&z,sizeof(int)))
        {
            z=z/2;
            printf("%d \n",z);
        }
        close(p2[0]); exit(0);
    }
    wait(0);
    exit(0);
}

close(p2[1]); close(p2[0]);
close(p1[0]);
write(p1[1],&x,sizeof(int)); write(p1[1],&y,sizeof(int));
close(p1[1]);
wait(0);
}

我在哪里关闭文件描述符错了?而我的输出是一堆0而不是我的预期值(首先是孩子的值* 3,然后在孙子中将值除以2)?我首先要通过管道(p1)将x和y的值写入第一个子节点,然后通过另一个管道(p2)将修改后的值发送给孙子。

0 个答案:

没有答案