【Linux c】pipe() dup2()怎么建立父进程和子进程的双向通信?

qianl_eni 发布于 2015/11/01 15:32
阅读 913
收藏 0
pipe(fd);    //父进程--》子进程 的管道
	pipe(fdd);   //子进程--》父进程 的管道
	childpid = fork();
	if(childpid){  //父进程
		close(fd[0]); 
		close(fdd[1]); 
		dup2(fd[1],1); 
		printf("%d\n",childpid);
		dup2(fdd[0],0);
		scanf("%d",&myn);  //①
		close(fd[1]);
		close(fdd[0]);
	}else{    //子进程
		close(fd[1]);
		close(fdd[0]); 
		dup2(fd[0],0); 
		scanf("%d",&myn);   //②
		dup2(fdd[1],1); 
		printf("33\n");
		close(fd[0]); 
		close(fdd[1]);

}

这代码哪里不对呢?①行和②行留一个就没问题了。



加载中
0
莫扎特的代码
莫扎特的代码
dup2(fd[1],1); 
        printf("%d\n",childpid);
        flush(stdout);
        dup2(fdd[0],0);
        scanf("%d",&myn);  //①

dup2(fd[1],1)之后stdout改为全缓冲了,输出被缓冲,子进程阻塞在scanf,形成死锁

q
qianl_eni
学习了,我也觉得发生了死锁,但不知道怎么解,根据你的提示printf 后面加fflush(stdout)就解决了。
返回顶部
顶部