问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux进程间管道通信问题,为什么子进程写了,子进程的子进程读不到

发布网友 发布时间:2022-09-21 17:03

我来回答

2个回答

热心网友 时间:2023-11-19 03:13

在 child1 进程中,你把 fd[0] close 掉并设置成-1,这样等child2被fork出来的时候,它所继承的fd[0]也同样是-1,当然无法从中读到任何东西。 改动很简单,把你close(fd[0])的那两行注释掉就行了,参考下面的代码。 更合理的改法是,fork完 child2 后,再在 child1 中close(fd[0]),你可以自行线下实现。


#include<sys/types.h>
#include<unistd.h>
#include<cstring>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>

int main(){
    int fd[2];
    if(pipe(fd)!=0){
        std::cout<<"pipe failed"<<std::endl;
        exit(0);
    }
    pid_t pid=fork();
    if(pid<0){
        std::cout<<"fork failed"<<std::endl;
        exit(0);
    }else if(pid == 0){
        //close(fd[0]);
        //fd[0]=-1;
        write(fd[1],"XXXXXX",10);
        std::cout<<"child1 process"<<std::endl;
    }else{
        exit(0);
    }
    
    std::cout<<"================="<<std::endl;
    pid_t pid1=fork();
    if(pid1<0){
        std::cout<<"fork1 failed"<<std::endl;
        exit(0);
    }else if(pid1 == 0){
        std::cout<<"chiled2 process"<<std::endl;
        close(fd[1]);
        fd[1]=-1;
        char buf[1024]={0};
        read(fd[0],&buf,10);
        std::cout<<buf<<std::endl;
        std::cout<<strlen(buf)<<std::endl;
    }else{
        exit(0);
    }

    return 0;
}

热心网友 时间:2023-11-19 03:14

你可以试着在子进程创建管道,在孙子进程读管道。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
iPhone XR电量百分比怎么设置 Django如何使用网页嵌套网页(2023年最新解答) 社保之前工作缴了 后面工作不缴。自己要怎么续上?自己缴要缴多少?每... 壁挂炉数字不亮了怎么回事了解壁挂炉数字不亮的原因及解决方法_百度知 ... 单反长镜头和短镜头什么区别 ai的剪切蒙版快捷键是什么 自学当程序员需要哪些基础 程序员,需要学什么课程 想当一名出色的程序员数学必须要很好吗 华为路由器192.168.1.1怎样设置? 广汽传祺gs4远光灯泡型号是什么 抖音上送的流量卡不想用,怎样才能销户 趣享付这个项目的盈利怎么样啊? 微信上的视频怎么下载来看呀 为什么电脑耳机没声音 支付宝怎么设置假名字 怎么登录抖音号 中国水上运动会的介绍 激励自己努力的励志句子语录 空调定时灯一直闪黄灯 做梦梦到哥结婚,我在哭,有人在追我 梦见哥哥的婚礼比自己的婚礼隆重自己居然哭了 京东到家自己上门购买也要运费吗 车损险计算案例1:以一辆北京地区的2010年购置的别克凯越车型为例,为方便计算,我们取新车购置价为 车损险拒赔案例分析 为什么很多相机配件要用黄铜来做? 工业商用黄铜制造机器零件,原因是什么 户户通电视怎么投屏? 舌苔厚,口苦口臭如何治疗 头舌有白苔又苦又臭吃什么一药 linux下进程通信管道和Fork函数的疑问 做法,韭菜炒莴笋怎么做好吃,韭菜炒莴笋的家常做法 通过趣享付创业现在晚不? 趣享付是怎样玩转社交广告的? 在趣享付流量主如何通过广告来赚钱? 天气预报中的降雨概率是指什么? 趣享付如何做任务赚钱 网络营销平台有哪些?趣享付怎么样呢 趣享付是不是倒闭了 佛山一线瓷砖品牌有哪些,强牌瓷砖是吗? ¥200¥急求[以八荣八耻为内容,编顺口溜或对联或诗或歌] 桂花树的克星是什么 驾考宝典上的题都准确吗? 想知道牛角面包生产线多少钱一台? 面包制造分几个阶段 分别是什么? 某面包房有两条平行的烘烤生产线,每条生产线配有一台搅拌机,一台发酵机和一个烤箱,还有一条包装生产线 魔兽世界亚麻布怎么得哇 七言律诗要有哲理而且字很好写的那种? 七言律诗,描写老师的,最好自创,老师特点不限 左脸淋巴结疼