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)将修改后的值发送给孙子。