当前位置: 首页 > news >正文

进程通信一

进程通信一

  • 一、进程通信的目的
  • 二、匿名管道
    • 什么是管道呢?
    • 站在文件描述表的角度
    • 站在内核的角度
    • 代码实现进程通信
    • 管道特征

一、进程通信的目的

我们都知道,进程是具有独立性的,但是进程与进程之间需要进行通信,因此进程之间的通信是需要消耗资源的

①数据交流:可以将一个进程的数据交给另一个进程
②资源共享:多个进程可以共享同一块内存资源
③通知时间:可以告诉一个进程它的子进程已经退出了
④进程控制:比如调试功能,对另一个进程进行监控

结论:
①进程之间的通信是共享一块内存空间的
②这个内存空间是操作系统提供的
③为什么不直接将一个进程的地址和数据直接动态的给另一个进程呢?愿意就是进程之间具有独立性,需要第三方提供内存
④对于操作系统来说,进程就是用户,操作系统拒绝任何用户去访问操作系统,但进程之间的通信又需要内存空间,所以操作系统对底层进行了封装,提供了一系列的系统调用接口。

二、匿名管道

什么是管道呢?

管道就是把一个进程连接到另一个进程的数据流就是管道,管道本质也是一个文件,但我们访问不到它。

站在文件描述表的角度

如何进行访问呢?
每一个进程在创建后都会有一个task_struct,这个task_struct里面有一个叫做file_struct文件结构体,这个结构体里边有一个叫做文件描述表,本质就是一个数组,0 1 2下表分别对应的是stdin,stdout,stderr,对应的外设就是键盘,显示器,显示器。

见图理解进程间的通信:

站在内核的角度

代码实现进程通信

子进程传给父进程数据 代码:

#include<iostream>#include<stdio.h>#include<unistd.h>#include<sys/wait.h>#include<string>#include<cstring>usingnamespacestd;#defineNUM1024#defineN2voidWriter(intfd){string s="hello, i am a child!!!";pid_t id=getpid();charbuffer[NUM]={0};intcount=0;while(true){snprintf(buffer,sizeof(buffer),"%s-%d-%d",s.c_str(),id,count++);write(fd,buffer,strlen(buffer));sleep(1);}}voidReader(intfd){charbuffer[NUM];while(true){buffer[0]=0;size_t n=read(fd,buffer,sizeof(buffer));if(n>0){buffer[n]=0;cout<<"father pid:"<<getpid()<<": "<<"# "<<buffer<<endl;}}}intmain(){//实现进程之间的通信intarr[N]={0};intp=pipe(arr);pid_t id=fork();if(id<0){perror("fork fial!");}if(id==0){close(arr[0]);Writer(arr[1]);// 写exit(0);}close(arr[1]);Reader(arr[0]);//读pid_t fd=waitpid(id,nullptr,0);return0;}

makefile:

testfile:testfile.cc g++-o $@ $^.PHONY:clean clean:rm-f testfile

运行结果:

运行视频

管道特征

①具有血缘关系的进程才能进行进程间的通信
②管道只能是单项的
③父子进程是会进程协同的,同步与互斥的 —保护管道文件的数据安全
④管道是面向字节流的
⑤管道是基于文件的,而文件的生命周期是随进程的

http://www.jsqmd.com/news/324030/

相关文章:

  • 人形机器人行业周报|EX机器人量产、Ameca表情系统、首形科技融资
  • #序列容器
  • MD5 详解:初学者一看就会的指南
  • CSDN 官方工具挂了,我花了 2 小时用浏览器自动化搞定了发文
  • 2026年靠谱的丽水离心脱水机设备厂家推荐清单
  • 我给 AI 助手写了个 CSDN 发文技能,结果它自己学会了改进
  • 【2026新版】 DirectX修复工具操作步骤,Microsoft DirectX全面解析与dll修复指南
  • 8-1 WPS JS宏 String.raw等关于字符串的3种引用方式
  • directx修复工具电脑版,游戏DLL缺失与修复方法指南,快速修复“XXX.dll缺失”
  • DirectX详细图文安装教程(包含安装包),DirectX安装步骤,DirectX修复工具增强版
  • ResNet :重新思考深度网络的学习目标
  • RAG应用避坑指南:20个可能让你项目“翻车”的巨坑
  • 2026年靠谱的豆皮机/牛排豆皮机高评分品牌推荐(畅销)
  • 2026年知名的人造肉机生产线厂家质量参考评选
  • 【AI技术安全】
  • Qt常用控件指南(7)
  • SpringBoot+Vue 酒店管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 如何在 LTspice中进行测试温度影响对电路的影响?
  • 基于SpringBoot+Vue的政府管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 医院药品管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 温州激光笔行业领军企业深度解析:2026年技术趋势与优选厂商指南
  • SpringBoot+Vue +周边游平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 视频格式转换实用指南:解决B站m4s缓存文件的跨设备播放问题
  • 从传统ETL到现代数据集成:技术演进全景图
  • 3步释放50GB空间:这款系统清理工具让C盘重获新生
  • 成都家用电梯厂家怎么选?2026年五家实力公司盘点
  • 新闻资讯系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 10个大数据架构最佳实践,让你的数据处理效率翻倍
  • 2026年四川家用电梯服务商综合实力深度测评
  • 信息知识赛系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】