VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 637|回复: 0

[交流] 关于linux匿名管道不关闭文件描述符,进行进程的双向通信

[复制链接]
56_avatar_middle
最佳答案
0 
donate_vip 发表于 2022-3-15 21:46:21 | 显示全部楼层 |阅读模式
假设数据是由父写子读,那么父进程关闭匿名管道的读端,子进程关闭匿名管道的写端,但如果我不关闭,严格的控制数据流向的时间,双向通讯没有报错,如果不控制时序,父进程自写自读快于子进程,子进程成僵尸进程,我是linux编,请给位大佬指点一下。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include <sys/wait.h>
int main(){

int fd[2];
        pid_t pid;
int ret=pipe(fd);
if(ret==-1){

        perror("pipe error");
        exit(1);
}
pid=fork();
if(pid==-1){
        perror("fork error");
        exit(1);
}
else if(pid==0)
{
//close(fd[1]);
char buf[1024];
ret=read(fd[0],buf,128);
printf("son read %d byte from father,%s\n",ret,buf);
sleep(5);
ret=write(fd[1],"hello,father",sizeof("hello,father"));

printf("son write %d byte to father\n",ret);

}else{
//close(fd[0]);
char buf1[128];
sleep(5);
ret=write(fd[1],"hello,son\n",sizeof("hello,son\n"));
printf("father write %d byte\n",ret);
sleep(3);
ret=read(fd[0],buf1,128);
printf("i receive %dbyte from son,is %s\n",ret,buf1);

}
return 0;
}

运行结果:
father write 11 byte
son read 11 byte from father,hello,son

son write 13 byte to father
i receive 13byte from son,is hello,father


pipe.png

pipe.tar.gz

476 Bytes, 下载次数: 0, 下载积分: 驿站币 -1





上一篇:匿名管道不知道为什么可以双向通信,请各位大佬指正
下一篇:用MFC自绘窗口遇到的小问题
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2022-10-5 03:29

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表