0
回答

if(id>1&&id<=k+1){ //子线程,进程id从2到k+1,一共k个子进程 int temp; for(i = 0; i<=n; i++){ //n: 数据总数 scanf("%d",&temp); //从pipe的fd[0]口读数据 if(temp < 0){ break; } printf("%d\n",temp); //数据转发给下个子进程(及该子进程的子进程) } for(i = 0; i<flag; i++){ printf("%d\n",bucket[i]); //将该进程自己的数据发给下一个子进程 } printf("-1\n"); //-1为数据结束标志 }else{ //父进程 for(i = 0; i<flag; i++){ printf("%d\n",bucket[i]); //放送数据 } printf("-1\n"); // -1为数据结束标志 fflush(stdout); } // 标准输入输出都被dup2重定向到pipe的fd[1]和fd[0] //数据传递:进程1 ==管道==》 进程2 ==管道==》进程k+1 /* k+1个进程形成进程链,通过管道连接,每个进程都有自己的数据(bucket), 目的是将数据按顺序传递,最终在第k+1个进程中得到完整的数据。 */ /* 问题是在 ...》进程k ==管道==》进程k+1 这一段, 经过检查进程k printf()出去的数据是完整的 类似: 1 2 3 4 5 6 但是到进程k+1 scanf()到的数据却不完整 类似: 5 6 无论k取多少时都一样。甚至k取1,只有2个进程的时候竟然也有错。但是k>1时,1到k这一段却可以正常传输,错误只在最后一个进程的接收端。真是搞不懂啊? */