Linux进程通信:命名管道,System V共享内存

news2024/11/26 22:44:05

目录

1.命名管道

 2.共享内存

3.共享内存和管道的生命周期

4.共享内存的优缺点


1.命名管道

命名管道和匿名管道的最大差别是:命名管道是创建在磁盘里的一个有名字的文件。这个文件不存实际的数据。但是不同进程可以通过文件路径找到相同的struct file(缓冲区)访问到这个文件,实现进程通信,进程通信的过程中发送和接收的数据不会被刷新到磁盘。匿名管道是创建在缓冲区的文件。

先了解一下mkfifo接口,pathname是管道的路径,mode是权限。

来用命名管道实现一个简单的进程通信

代码实现就不上了,看看效果。 

 这里我们明显就可以看出两个进程之间的通信。


 2.共享内存

共享内存实际上就是在物理内存上申请了一块空间。不同的进程通过页表共同挂接到这块空间,从而实现通信。

这里我们需要了解一些接口:

 pathname是要保证存在的一个路径,proj_id是权限。

作用是依据一个特殊的算法创建一个唯一的key值

最后返回这个key值

 key就是上面的key,size表示共享内存的大小。建议设置为4096的倍数,你搞个4097操作系统会开4096*2字节,因为操作系统一会开4kb。shmflg的常用取值有IPC_CERATE 和 IPC_EXCL

前者表示不存在会创建这个共享内存,后者表示若是这个key值已经创建过共享内存了,我们就出错返回。而使用IPC_CREATE | IPC_EXCL |0666就可以创建出一个全新的共享内存且权限为666了。

最后返回一个类似文件描述符fd的数shmid。

 shmid是上面shmget的返回值。用来让进程找到对应的共享内存,shmaddr和shmflg默认给nullptr和0,交于系统来处理挂接。这样我们就可以创建好进程与共享内存的挂接关系。

最后返回一个指针。

 用上面的指针来解开进程与共享内存的挂接关系。

 最后,shmctl用来销毁这个共享内存,shmid就是创建共享内存是的返回值。cmd一般给IPC_RMID表示就算还有进程挂在共享内存上,我也一样删除。最后的buf默认给nullptr。

实际上,挨着上面的接口走一遍就成功建立起一个进程与共享内存的连接。并最后删除了连接状态并删除了共享内存。


3.共享内存和管道的生命周期

 管道的生命周期随进程,本质是内核中的缓冲区,命名管道文件只是标识,用于让多个进程找到同一块缓冲区,删除后,之前已经打开管道的进程依然可以通信。

共享内存生命周期随内核,只要不删除,就一直存在于内核中。不过它还有一种特殊的退出方式,只要本来所有与它连接的进程全部退出,共享内存同样会被销毁。


4.共享内存的优缺点

共享内存相对于管道而言,它的优点是进程间通信快,毕竟管道必须通过内核缓冲区才能将进程连接到指定的管道文件。而对于共享内存来说,它是直接将进程通过页表与物理内存相连接速度更快。缺点也很明显,太复杂,搞了这么一大套系统接口,linux下一般都是各个文件直接收系统管制。说白了就是System v的方式搞特例,我们不太喜欢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你好,法语!A2知识点总结(2)

2.各种词类 2.1代词 代词,形容词,副词,介词 重读人称代词 1)构成 2)作用 1-重读人称代词≧2 一般次序:“他/她/它、你、我” Ex: Elle, toi et moi, nous allons faire du shopping. 2-soi: 泛指 Ex: -…

网络管理中TRUNK的作用和使用

作者简介:一名99年软件运维应届毕业生,正在自学云计算课程。宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。创作不易,动动小手…

路径规划算法之几何建模

目录 1 几何建模简介 1.1 机器人建模 1.2 环境建模 2 多边形和多面体模型 2.1 凸集的定义 2.2 凸集的边界表示与实心表示 2.3 非凸多边形 2.4 逻辑谓词 2.5 多面体模型 2.6 阿拉伯数字半代数模型 2.7 非凸多边形的另一种编码 2.8 3D三角形 2.9 非均匀有理B样条曲线…

Qt Quick、QML01——QML内容结构介绍

目录标题一、从Window 窗口组件开始(一)属性flags 表:visibility 表(二)信号和处理器(槽函数)(通用)(三)调用函数(通用)&a…

MapReduce Partition 分区

MapReduce Partition 分区 MapReduce输出结果个数研究 在默认情况下 不管Map阶段有多少个并发执行的task,到Reduce阶段,所有结果都将有一个task来进行处理,并且最终结果将输出到一个文件中,part-r-0000。 可以进行手动的设置re…

微信小程序图书商城毕业设计,图书商城购物小程序系统设计与实现,图书商城购物小程序商城毕设作品参考

功能清单 【后台管理员功能】 会员列表:查看所有注册会员信息,支持删除 录入资讯:录入资讯标题、内容等信息 管理资讯:查看已录入资讯列表,支持删除和修改 广告设置:上传图片和设置小程序首页轮播图广告地…

相机拍照不清晰怎么回事?不清晰地照片还能修复高清吗?

现在有很多的人都非常的喜欢拍照,主要就是因为喜欢记录,抓住我们身边的美,但是拍照的话就要使用相机,那么像相机电子产品我们在平常的时候是使用不到的,只有在有需求的时候可以使用的,而且也是有需求的人才…

Spring Security(6)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~ Spring Security使用MySQL保存cookie记录虽然方便,但是目前更多的主流互联网应用都是用NoSQL来保存非业务数据的,Spring Security也应该可…

案例分享|生产环境MQ集群一个非常诡异的消费延迟排查

1、问题现象 某一天,项目组一个同事向我反馈,他们使用公司的数据同步产品将MySQL数据同步到MQ集群,然后使用消费者将数据再同步到ES,反馈数据同步延迟严重,但对应的消费组确没有积压,但最近最近几分钟的数…

LinkedIn领英开发客户方法大全(篇二)

profile完善步骤详细说明 详细步骤: 如下图箭头所示步骤,点击“view my profile”: 进入你的档案资料界面: 1)点击红色圆圈所示处,即进入Edit intro界面: 即编辑个人简介,包括: …

企业如何通过推特群推创造商机

尤其是小企业要足够重视Twitter在营销推广上的重要性。因此,你有必要精心设计Twitter主页,并付诸投入和努力,这样就会看到消费者数量的增长,以及品牌忠诚度的提升。无疑,在Twitter上,很多企业可以发现商机&…

HTML基础-表单标签,button按钮,select下拉菜单

HTML基础-表单标签 目标和学习路径 1.表单标签 1.1 input系列标签的基本介绍 1.2 input系列标签-文本框 (拓展)value属性和name属性作用介 1.3 input系列标签-密码框 1.4 input系列标签-单选框 1.5 input系列标签-复选框 1.6 input系列标签-文件选择 2.button按钮标签 1.7 inpu…

JVS无忧·企业计划2.1.6更新说明

无忧企业计划是JVS企业数字化全家桶中重要组成部分,主要用于项目管理、任务管理、进度跟踪、过程管理等场景。 任务管理是企业内部事务协同的重要工具,与传统的OA有类似之处,同样是推动企业内部事务有效快速的执行,但之前存在不同…

直流无刷电机(BLDC)转速闭环调速系统及Matlab/Simulink仿真分析(二)

文章目录前言一、转速闭环直流调速系统二、Matlab/Simulink仿真2.1.仿真电路分析2.2.仿真结果分析总结前言 变压调速是直流调速系统的主要调速方法,因此系统的硬件至少包含:可调直流电源和直流电机两部分。可调直流电源多采用直流PWM变换器,…

CMMI2.0之我见-过程质量保证PQA

编者按: CMMI2.0之我见系列将通过系列文章形式介绍CMMI2.0所涉及到的其中20个实践域,笔者将通过系统性的梳理、浅显易懂的文字描述,同时结合笔者的思考和观点,对每个实践域的目标以及所基本涵盖的内容进行描述,希望能…

CSS 的快乐:画一个可爱的三只小鸟 Button

做为前端工程师,最大的快乐之一就是可以用 CSS 画出各种有趣的效果。 比如我最近画的一个 Button: 画的过程中确实很开心,这也是我当时选择做前端的很大一部分原因。 今天我们就一起来画下这个可爱的 Button 吧!纯 CSS&#xff…

Kamiya丨Kamiya艾美捷小鼠血清淀粉样蛋白A ELISA说明书

Kamiya艾美捷小鼠血清淀粉样蛋白A ELISA预期用途: 小鼠血清淀粉样蛋白A ELISA是一种高灵敏度的双位点酶联免疫分析(ELISA)小鼠生物样品中血清淀粉样蛋白A(SAA)的定量测定。仅供研究使用。 引言 铜蓝蛋白是参与铜转运…

Go学习之路:更多类型:struct、slice 和映射(DAY 2)

文章目录前引更多类型:struct、slice 和映射1、指针2.1、结构体/结构体命名(一)2.2、结构体/对象访问、指针访问、初始化规则(二)3、数组4.1、切片/初始化切片4.2、切片/切片引用数组4.3、切片/切片的length和capacity…

React Context源码是怎么实现的呢

目前来看 Context 是一个非常强大但是很多时候不会直接使用的 api。大多数项目不会直接使用 createContext 然后向下面传递数据&#xff0c;而是采用第三方库&#xff08;react-redux&#xff09;。 想想项目中是不是经常会用到 connect(...)(Comp) 以及 <Provider value{s…

非互联网客户收入近6成,阿里云进入新周期

近日&#xff0c;阿里巴巴发布了截至2022年9月30日止季度&#xff08;2023财年第二季度&#xff0c;阿里财年从每年4月1日至第二年3月31日&#xff09;业绩。 在除去阿里内部使用的额度&#xff0c;抵销跨分部交易后&#xff0c;阿里云业务分部&#xff08;包括阿里云和钉钉&am…