news 2026/7/14 13:40:58

进程通信一

作者头像

张小明

前端开发工程师

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/7/4 19:40:53

人形机器人行业周报|EX机器人量产、Ameca表情系统、首形科技融资

人形机器人行业周报&#xff5c;2025.01.30本周看点&#xff1a;国产仿人机器人量产提速、表情交互技术成新焦点、资本持续加码赛道&#x1f4f0; 本周要闻 1. EX机器人宣布年产500台仿人机器人 分类&#xff1a;行业新闻 大连EX机器人正式宣布量产计划&#xff0c;年产能达到5…

作者头像 李华
网站建设 2026/7/8 9:59:11

3步释放50GB空间:这款系统清理工具让C盘重获新生

3步释放50GB空间&#xff1a;这款系统清理工具让C盘重获新生 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你的电脑是否经常弹出"存储空间不足"的警告…

作者头像 李华
网站建设 2026/7/8 9:59:11

老旧Windows电脑优化与系统焕新指南:从零成本到性能唤醒

老旧Windows电脑优化与系统焕新指南&#xff1a;从零成本到性能唤醒 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着电脑使用时间的增长&#xff0c;许多用户都会遇到…

作者头像 李华
网站建设 2026/7/13 7:52:22

智能家居自动化:从设备联动到场景定制的全栈技术指南

智能家居自动化&#xff1a;从设备联动到场景定制的全栈技术指南 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 1. 场景化…

作者头像 李华
网站建设 2026/7/11 20:21:51

颠覆式浏览器端OFD处理:前端渲染技术革新方案

颠覆式浏览器端OFD处理&#xff1a;前端渲染技术革新方案 【免费下载链接】ofd.js 项目地址: https://gitcode.com/gh_mirrors/of/ofd.js 你是否曾遇到过这样的困境&#xff1a;用户上传OFD文件后&#xff0c;需要等待后端服务器解析才能预览内容&#xff1f;传统方案不…

作者头像 李华