Linux中的共享内存

复制代码
#include <sys/ipc.h>
       #include <sys/shm.h>

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

shmflg:

IPC_CREAT:

如果不存在,创建之,如果存在获取之。

IPC_EXCL:

1.无法单独使用

2.IPC_CREAT|IPC_EXCL:如果不存在,创建之,如果出错就返回给用户。

如果创建成功,一定是一个新的shm!

key_t key:

能够标定唯一性。看到同一个key就具备了看到同一份资源的可能性。

通过ftok创建key

复制代码
 #include <sys/types.h>
       #include <sys/ipc.h>

       key_t ftok(const char *pathname, int proj_id);

操作系统给用户提供的资源上线 ulimit -a

操作系统禁止捕捉9号信号。

共享内存=物理内存块+共享内存的相关属性。

复制代码
 ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status  

查看共享内存。

共享内存的生命周期是随OS的,不是随进程的!!!

删除共享内存使用shmid!!!

复制代码
#include <sys/types.h>
       #include <sys/shm.h>

       void *shmat(int shmid, const void *shmaddr, int shmflg);

       int shmdt(const void *shmaddr);

通过shmat使共享内存和进程实现关联。

**shmaddr:**指定虚拟地址让共享内存映射到指定的虚拟地址。通常设为null

shmflg:与读写权限有关,通常设为0;

shmat:返回的是共享空间的起始地址。

复制代码
ipcrm -m 65536

删除共享内存。

复制代码
ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status   

查看共享内存。

相关推荐
optimistic_chen3 分钟前
【AI Agent 全栈开发】MCP
java·linux·运维·人工智能·ai编程·mcp
charlie1145141915 分钟前
嵌入式Linux嵌入式Linux驱动开发:板级DTS实操与完整实战演练——从修改设备树到点亮LED的完整闭环
linux·运维·驱动开发
匆匆那年9678 小时前
VSCode 远程 Linux 使用Codex
linux·ide·vscode
SWAGGY..9 小时前
Linux系统编程:(七)Makefile入门:轻松掌握编译自动化
linux·运维·自动化
开开心心就好10 小时前
免费流畅的远程控制实用工具
linux·运维·服务器·网络·智能手机·excel
黑猫学长呀11 小时前
存储宝典第2篇:盲封TT wafer是什么意思?
linux·嵌入式硬件·项目·芯片·ufs·晶圆·产测
Strugglingler12 小时前
【Linux 用户态操作 UART】
linux·uart
代码熬夜敲Q12 小时前
ENSP 网络工程实验
linux·运维·服务器
csdn_life1812 小时前
OpenClaw v2026.5.12+ 高级密钥管理:使用SecretRef实现真正的隐蔽存储
linux·openclaw
Terrence Shen12 小时前
Claude Code Harness 源码学习讲义
linux·学习·ubuntu