0
回答
Linux c下pipe、多进程、dup2、printf、scanf问题
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   
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这一段却可以正常传输,错误只在最后一个进程的接收端。真是搞不懂啊?

	*/



举报
qianl_eni
发帖于2年前 0回/309阅
顶部