所以我似乎有一个奇怪的错误。
我目前正在工作的项目要求我生成一些子进程,每个进程计算其周围的其他子进程的平均值,然后通过公共管道向父进程报告该子进程&# 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。