news 2026/5/15 21:09:31

进程通信一

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
进程通信一

进程通信一

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

一、进程通信的目的

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

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

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

二、匿名管道

什么是管道呢?

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

站在文件描述表的角度

如何进行访问呢?
每一个进程在创建后都会有一个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

运行结果:

运行视频

管道特征

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 21:57:53

从传统ETL到现代数据集成:技术演进全景图

从ETL到现代数据集成&#xff1a;一场数据处理的革命 一、引言&#xff1a;当传统ETL遇到“数据爆炸”的挑战 你是否遇到过这样的场景&#xff1f; 企业每天产生TB级的用户行为数据&#xff0c;但需要等待24小时才能看到前一天的报表&#xff1b;新增一个数据源&#xff08;…

作者头像 李华
网站建设 2026/5/9 9:05:31

论文AI率从70%降到5%以内,亲测一键搞定毕业论文AI检测!

一抬头居然要过年了&#xff01;文献综述搞定了吗&#xff1f;实验数据整理完了吗&#xff1f;论文初稿不会还在文件夹里躺平吧 更要命的是&#xff0c;越来越多的高校新增了硬性规定&#xff1a;论文必须通过知网/维普/万方的aigc检测&#xff0c;ai率一旦超标&#xff0c;轻…

作者头像 李华
网站建设 2026/5/11 19:25:31

TEKLauncher:重构ARK生存进化游戏管理体验

TEKLauncher&#xff1a;重构ARK生存进化游戏管理体验 【免费下载链接】TEKLauncher Launcher for ARK: Survival Evolved 项目地址: https://gitcode.com/gh_mirrors/te/TEKLauncher 副标题&#xff1a;如何让模组管理、服务器连接与多语言适配效率提升90%&#xff1f;…

作者头像 李华
网站建设 2026/5/10 20:23:46

4个维度打破无衬线字体选择困境:Bebas Neue的商业设计价值重构

4个维度打破无衬线字体选择困境&#xff1a;Bebas Neue的商业设计价值重构 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 在品牌视觉设计领域&#xff0c;字体选择往往陷入"美学表达"与"商业实用…

作者头像 李华
网站建设 2026/5/12 23:36:10

如何突破网盘限速?3款工具实测对比与技术解析

如何突破网盘限速&#xff1f;3款工具实测对比与技术解析 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改&#xff08;改自6.1.4版本&#xff09; &#xff0c;自用&#xff0c;去推广&#xff0c;无…

作者头像 李华