【Linux】进程间通信——system V版本 共享内存
目录
共享内存
原理
实践
shmget() 创建共享内存
shmctl() 删除共享内存
shmat() 挂接进程和共享内存
shmt() 进程和共享内存去关联
共享内存的特性
优势
劣势
用共享内存实现进程间通信
共享内存
原理
两个进程的PCB各自维护着一个进程地址空间。当两个进程要进行通信时:
- 操作系统在内存中开辟一个内存块。
- 通过两个进程的页表,将内存中的内存块映射到两个进程的进程地址空间中。
- 此时两个进程就能看到同一个内存了,也就建立了通信。
- 进行通信时,两个进程只需要访问自己的进程地址空间即可,操作系统会通过页表访问内存中的内存块。

实践
shmget() 创建共享内存

- 功能:
在内存中创建共享内存
- 参数:
- key_t key 用来确定共享内存的唯一标识(系统中有很多共享内存,如何确定进程A和进程B通信的共享内存是同一个呢?通过key来确定)
- size_t size 创建共享内存的大小
- int shmflg 共享内存的权限,包括下面两种:
1、 IPC_CREAT 不存在创建,存在获取
2、IPC_EXCL 无法单独使用,必须与其他标志组合使用
IPC_CREAT | IPC_EXCL:创建共享内存,如果不存在,则创建,如果存在,错误返回。
- 返回值
创建成功返回共享内存的标识,失败返回-1。

如何获取key?

- 功能
创建独一无二的key值
- 参数
1、pathname: 文件的路径,可以随便填写,建议当前路径"./"
2、proj_id:项目的id,可以随便填写
- 返回值
返回一个key值

shmctl() 删除共享内存
当我们在进程通信时使用shmget创建了共享内存,但是当进程结束之后,共享内存并没有消失。
共享内存的生命周期是随内核的,用户不主动关闭,就一直存在。

可以使用 ipcs -m 指令查看共享内存.

如何删除共享内存? 两种方式:
1、手动输入命令 ipcrm -m shmid 删除
2、在程序中使用函数 shmctl()删除

- 功能
删除指定shmid的共享内存
- 参数
1、shmid 要删除的共享内存的id,是shmget的返回值
2、cmd 删除的命令,常用的是IPC_RMID,也有时候用IPC_STAT
3、buf 描述共享内存的数据结构的指针,一般设置为nullptr
- 返回值
成功返回 0, 失败返回 -1
shmat() 挂接进程和共享内存

- 功能
使两个进程挂接到同一个共享内存上
- 参数
1、shmid 创建共享内存后返回的标识符,shmget的返回值
2、shmaddr 指定共享内存映射到进程地址空间中的地址,一般设置成NULL,让系统自动来设置。
3、shmflg 权限,可以设置为0
- 返回值
共享内存映射到进程地址空间中的地址(shmaddr),不成功返回-1

shmt() 进程和共享内存去关联

- 功能
将进程和共享内存去关联
- 参数
shmaddr 指定共享内存映射到进程地址空间中的地址,shmat的返回值。
- 返回值
返回挂接进程个数

共享内存的特性
优势
当使用管道进行进程间通信的时候,需要拷贝4次。
键盘->写入端进程地址空间->管道->写出端进程地址空间->显示器

使用共享内存进行进程间通信的时候,需要拷贝两次
键盘->共享内存(写入写出端进程地址空间)->显示器

所以,共享内存是进程间通信最快的!
劣势
共享内存通信方式没有同步和互斥机制,容易导致混乱。
用共享内存实现进程间通信
实现进程间通信,需要两个进程,一个做客户端,一个做服务端


运行结果:

相关文章:
【Linux】进程间通信——system V版本 共享内存
目录 共享内存 原理 实践 shmget() 创建共享内存 shmctl() 删除共享内存 shmat() 挂接进程和共享内存 shmt() 进程和共享内存去关联 共享内存的特性 优势 劣势 用共享内存实现进程间通信 共享内存 原理 两个进程的PCB各自维护着一个进程地址空间。当两个进…...
【TEE论文】IceClave: A Trusted Execution Environment for In-Storage Computing
摘要 使用现代固态硬盘(SSD)的存储中计算使开发人员能够将程序从主机转移到SSD上。这被证明是缓解I/O瓶颈的有效方法。为了促进存储中计算,已经提出了许多框架。然而,其中很少有框架将存储中的安全性作为首要任务。具体而言&…...
【攻防世界】bug
垂直越权IP绕过文件上传 垂直越权 IP绕过 bp抓包,添加请求头X-Forwarded-For:127.0.0.1 文件上传 文件上传绕过: 1. mime检测(Content-Type) 2. 大小写绕过 3. 等价替换(php5,php3) 4. 利用J…...
详解UART通信协议以及FPGA实现
文章目录 一、UART概述二、UART协议帧格式2.1 波特率2.2 奇校验ODD2.3 偶校验EVEN 三、UART接收器设计3.1 接收时序图3.2 Verilog代码3.3 仿真文件测试3.4 仿真结果3.5 上版测试 四、UART发送器设计4.1 发送时序图4.2 Verilog代码4.3 仿真文件测试4.4 仿真结果4.5 上板测试 五、…...
【算法】删除链表中重复元素
本题来源---《删除链表中重复元素》。 题目描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2]示例 2: 输入…...
mysql防坑指南
1. MySQL连接数问题 MySQL里的max_connections参数代表mysql数据库的最大连接数,参数默认是151,显然不适用于生产,如果请求大于默认连接数,就会出现无法连接数据库的错误,会遇到too many connections的报错信息。 Mys…...
偏微分方程算法之混合边界差分
目录 一、研究对象 二、差分格式 2.1 向前欧拉格式 1. 中心差商 1.1.1 理论推导 1.1.2 算例实现 2. x0处向前差商,x1处向后差商 1.2.1 理论推导 1.2.2 算例实现 2.2 Crank-Nicolson格式 2.2.1 理论推导 2.2.2 算例实现 一、研究对象 这里我们以混合边界…...
中国八大古都,分别是哪8个?
中国历史上统一王朝或者在全局范围内看呈鼎立之势的大的政权的首都,称古都,又称都城、国都等,是古代王朝的政治中心,也是经济和文化中心。 1、西安 西安,古称长安,是中国历史上建都时间最长、建都朝代最多…...
财务信息化与财务软件有何区别与联系?
财务产品与财务信息化,两者究竟有何不同,又有何相通之处?或许,你心中也充满了这样的疑惑。那么,让我用一则小故事,为你揭晓其中的秘密。 想象这样一个场景,长尾狐狸,作为饭团公司的…...
ssm052游戏攻略网站的设计与实现+vue
游戏攻略网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本游戏攻略网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处…...
SAP Credit Memo 到期日设置技巧
当我们用FB60, MIRO或者FB70 记账vendor或者customer 的Credit Memo的时候,我们发现Credit Memo的Due Date不受付款条款的影响,默认为跟baseline date是同一天,并且无法手工更改,那么如果要设置到期日怎么操作呢? 首先…...
软件开发安全设计方案
2.1.应用系统架构安全设计要求 2.2.应用系统软件功能安全设计要求 2.3.应用系统存储安全设计要求 2.4.应用系统通讯安全设计要求 2.5.应用系统数据库安全设计要求 2.6.应用系统数据安全设计要求 软件开发全资料获取:软件开发全套资料_软件开发资料-CSDN博客https://…...
【Zabbix】zabbix 软件监控
使用zabbix监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态 利用一个优秀的监控软件,我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器状态 ●可以在 Web 前端方便的查看监控…...
Vue Router 路由动态缓存组件
文章目录 一、简介基本用法生命周期钩子 二、定义是否缓存组件三、缓存组件1. 通过 :include 属性实现vue2.x中vue3.x中 2. 通过 v-slot 功能实现3. 通过 v-if 来实现 四、注意事项 一、简介 Vue Router 允许你缓存路由组件,这样在用户导航回之前的页面时ÿ…...
数据结构:线性表————单链表专题
🌈个人主页:小新_- 🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 🏆所属专栏࿱…...
多线程(54)JMM中的内存屏障
Java内存模型(JMM)中的内存屏障是一种保证内存可见性、顺序性的底层机制。它们是一组指令,用于在多线程环境中确保内存操作的有序性和可见性。内存屏障主要分为四类:LoadLoad、StoreStore、LoadStore和StoreLoad。 内存屏障的类型…...
什么是流量清洗?
随着网络企业的迅速发展,越来越多的用户都开始关注关于网络流量的问题,同时,随着网络流量的增多,网络上也出现了大量的垃圾信息和恶意攻击,给网络带来了很大的困扰,而流量清洗则能够解决这个问题。 流量清洗…...
淘宝API(通过商品详情接口采集商品页面数据)请求说明文档|可接入测试key
淘宝商品详情数据接口(taobao.item_get)是天猫开放平台提供的一种API接口,旨在帮助开发者获取天猫平台上的商品详情信息。通过调用这个接口,开发者可以获取包括商品ID、标题、价格、库存量、图片等在内的详细数据,从而…...
示例说明闭包函数
示例说明闭包函数 闭包函数是指在一个函数内部定义另一个函数,并且内部函数可以访问外部函数的局部变量,即使外部函数已经执行完毕。 这种功能使得闭包函数可以捕获外部函数的状态,提供了一种保留局部变量值的方式。闭包函数在编程中常用于…...
【自媒体创作利器】AI白日梦+ChatGPT 三分钟生成爆款短视频
AI白日梦https://brmgo.com/signup?codey5no6idev 引言 随着人工智能(AI)技术的快速发展,AI在各个领域都展现出了强大的应用潜力。其中,自然语言处理技术的进步使得智能对话系统得以实现,而ChatGPT作为其中的代表之一…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
