2026.4.21Linux 共享内存

1.假设现在有A B 两个进程

单工:单向性,确定通信方向后固定,不能相互传输数据

全双工:双向性,同一时刻,两方可以互相传输数据

半双工:双向性,同一时刻,只能一方给另一方传输数据

管道的通信方式为半双工

进程间的通信方式(IPC):管道 共享内存 消息队列 信号量 套接字

Int shmget(key_t key,size_t size,int shmflg);

Shmget函数:创建一块共享内存空间

sey:共享内存段的唯一标识

size:表示创建的共享内存空间的大小

创建新共享空间时,该参数填正整数

获取已有共享空间时,该参数可以填0

shmflg:标志位,用来控制函数行为(类似于open函数的第二个参数)

创建标志:IPC_CREAT:如果key不存在,则创建

IPC_EXCEL与IPC_CREAT配合使用(确保这样子书写是能够保证自己创建的是新空间),即如果key已经创建则报错并设置错误原因给errno(看errno的返回值就能知道函数是否创建成功)

权限控制:需要指定权限位(0777 0666 0600等但必须保证是八进制)

返回值:

-1:表示共享内存创建失败

正数:表示该段的标识符

ipcs:可以查看当前系统中进程间通信资源

2.void *shmat(int shm_id,const void * shm_addr,int shmflg);

Shmat函数:将一个已存在的共享内存段映射到地址空间中

Shm_id:共享内存段的标识符,通常是shmget函数的返回值

Shm_addr:指定共享内存段要附加到进程地址空间的哪一个地址

NULL:让系统内核自动选择一块合适的未使用的地址来附加共享内存段

非NULL:系统会将共享内存段附加到指定位置,如果指定位置不能使用,则报错附加失败

Shmflg:控制附加操作标志位

():默认权限,根据shmget创建时的权限进行读写

SHM_RDONLY:以只读方式附加共享内存段,如果该进程尝试写入,则引发段错误

SHM_EXEC:允许在共享内存段上执行代码.

练习:

设置一个进程为读取共享内存上的数值持续读取,而另外一个进程可以持续写入

,直到输入end后,两个进程结束

共享内存的工作方式为全双工

相关推荐
空堂与归38 分钟前
Linux 命令实战:AI 开发者必备的终端操作手册
linux
我命由我123452 小时前
匈牙利命名法
java·服务器·后端·学习·java-ee·kotlin·学习方法
小田的博客2 小时前
SAP MM 供应商银行主数据更新报错!message R1228!
android·java·服务器
牢姐与蒯2 小时前
Linux基本指令及知识点(二)
linux·运维·服务器
小玮看世界2 小时前
[Python]从“脏”数据到优雅实现:一个IoT滑动窗口最大值问题的测试驱动优化实录
linux·前端·python
2601_949499942 小时前
芯瑞科技 DT-1414 光模块工程实测:完美兼容博通(安华高) HFBR-1414PTZ,VCSEL 替代方案
大数据·网络·人工智能·科技·光模块
去伪存真20253 小时前
数字样机、态势推演与3D汇报场景下的平台选型对比
运维·服务器
云边云科技_云网融合3 小时前
连锁门店 POS、监控、IoT 设备网络不稳定怎么解决?
网络·物联网
RisunJan3 小时前
Linux命令-spell(Unix 拼写检查工具 —— 文本校对的基础利器)
linux·运维·unix
BLi4ee3 小时前
WSL 文件资源管理器左侧 Linux / Ubuntu 入口恢复
linux·ubuntu