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

管道与共享内存

一,命名管道

管道的限制就是他只能在有血缘关系(父子进程)的进程中,允许互相访问,这是有局限性的,所以我们想在毫无关系的进程中允许他们相互访问,这就是命名管道的定义。
总结:命名管道就是让不同进程可以通信,让不同的进程看到同一份资源
在这里插入图片描述
就比如这个图,通过管道让两个进程看到同一个资源,然后执行不同的任务,进程A就进行向文件中读取数据,而进程B就是向文件中写入数据。

两个不同的进程打开同一份文件时,他们需要自己独立的文件描述符,但是只需要相同的一份缓冲区这也是管道。

创建命名管道

在这里插入图片描述

二,共享内存

共享内存也是让毫无关系的进程进行通信(不同的进程看到同一份资源);

1.创建共享内存

在这里插入图片描述
对于OS来说可能有很多的程序需要内存共享,所以要先描述在组织,shm结构体包含了共享内存的属性。

系统中有很多的共享内存如何保证两个进程看到的是同一个内存呢?
给共享内存提供唯一性的标识,共享内存的属性中有key_t值。

shmget的第三个参数shmflg两个重要的宏

  1. IPC_CREAT:如果共享内存不存在就创建,如果已经存在就获取他
  2. :不能单独使用
  3. IPC_CREAT|IPC_EXCL:不存在就创建,存在就出错返回!

key的作用就用来标识贡献内存的唯一性!

1.1生成key

在这里插入图片描述

使用共享内存通信,只需要一个进程创建新得shm,另一个直接通信即可。
在这里插入图片描述
贡献内存,进程结束我们没有主动关闭,他就会一直存在,他的生命周期随内核,所以我们要手动的去关闭它

补充:系统指令删除共享内存

ipcs -m

查看系统中指定用户创建得共享内存
在这里插入图片描述

ipcrm -m [shmid]

删除共享内存
在这里插入图片描述

2.删除共享内存

在这里插入图片描述
另外shmctl不仅仅可以删除共享内存,它还可以获取共享内存的属性。
在这里插入图片描述

3.挂接共享内存

在这里插入图片描述
shmaddr:用户指明讲共享内存挂接到哪里;
挂接成功表示:我们可以用addr返回值,直接访问共享内存。

4.去关联

在这里插入图片描述

三,共享内存的缺点

我们在测试的时候就会发现一个问题,当client都没有在向共享内存中写入数据,server就一直在读取了:共享内存不提供任何进程间协同的机制。这是共享内存的缺点,会导致数据不一致。所以加入管道就可以避免这一缺点。

http://www.lryc.cn/news/467913.html

相关文章:

  • ES 自定义排序方式
  • 在vue中,编写一个li标签同时使用v-for和v-if,谁的优先级更高
  • Java 后端开发面试题及其答案
  • C++,STL 045(24.10.24)
  • 二叉树习题其五【力扣】【算法学习day.12】
  • 【数据库】Mysql的锁类型
  • 自媒体短视频制作素材下载网站推荐,让创作更简单
  • Altium Designer 入门基础教程(五)
  • Java题集练习3
  • 【部署篇】Haproxy-01安装部署(源码方式安装)
  • 开拓鸿蒙测试新境界,龙测科技引领自动化测试未来
  • Java项目-基于springboot框架的自习室预订系统项目实战(附源码+文档)
  • 调整数组奇偶数顺序
  • Electron调用nodejs的cpp .node扩展【非安全】
  • 一文了解AOSP是什么?
  • ffmpeg视频边缘模糊,打造梦幻般的视觉效果!
  • [Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)
  • 大话红黑树之(1)入门介绍
  • ESC/POS图片打印指令
  • Unity之如何在Linux上部署Dedicated Server专用服务器
  • 十、Linux 故障排除专业案例分享
  • 智慧楼宇平台,构筑未来智慧城市的基石
  • JVM 实战篇(一万字)
  • 线程同步之双摄
  • 使用 PyTorch 构建 LSTM 股票价格预测模型
  • 【C++篇】C++类与对象深度解析(五):友元机制、内部类与匿名对象的讲解
  • 模型训练进度条的代码
  • 直观理解反向传播 | Chapter 3 | Deep Learning | 3Blue1Brown
  • 052_python基于Python高校岗位招聘和分析平台
  • 基于物联网、大数据、人工智能等技术开发的Spring Cloud 智慧工地云平台源码,支持多端应用