调用pipe()

时间:2015-12-10 06:34:08

标签: c

所以我似乎有一个奇怪的错误。

我目前正在工作的项目要求我生成一些子进程,每个进程计算其周围的其他子进程的平均值,然后通过公共管道向父进程报告该子进程&# 39;平均值是。

在父进程中第五次调用pipe()以打开文件描述符11和12后,我似乎得到了这些值,以及值3和6.任何想法为什么会这样?我只关闭子进程中的文件描述符,并且在父进程即将退出之前。

此特定流程的代码:

pipe(parentPipe); //opens FDs 3,4
.... //code that spawns 2 or 3 children, depending on input
if (children == 4) {
   pipe(leftIn); //opens FDs 5,6
   if (!fork()) {
      //In the left most child
      close(parentPipe[0]);
      close(leftIn[0]);
      OneCell(...) //just makes a child
   }
   //Two more pipes for communication between current child and next
   pipe(rightIn); //opens 7,8
   pipe(rightOut); //opens 9,10
   if (!fork()) {
      close(parentPipe[0]); 
      close(leftIn[1]); 
      close(rightIn[1]); 
      close(rightOut[0]);
      EndAdjCells(...)
   }
   pipe(leftOut); <-- this is the pipe that gives me strange values 
   printf("Leftout FDs Read %d Write: %d\n", leftOut[0], leftOut[1]);

管道后面的printf(leftOut)在我的控制台中出现两次。一次是11和12的值,然后是另一次打印3和6。

0 个答案:

没有答案