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   

查看共享内存。

相关推荐
小码吃趴菜2 分钟前
进程间通信 管道-信号量
linux
AndyHeee34 分钟前
【瑞芯微rk3576刷ubuntu根文件系统容量不足问题解决】
linux·数据库·ubuntu
李昊哲小课35 分钟前
Ubuntu 24.04 在线安装 Redis 8.x 完整教程
linux·redis·ubuntu
sao.hk36 分钟前
ubuntu2404,vbox,全屏显示
linux·运维·服务器
危笑ioi36 分钟前
linux配置nfs在ubuntu22.04
linux·运维·服务器
社会零时工1 小时前
【ROS2】海康相机ROS2设备服务节点开发
linux·c++·相机·ros2
东城绝神1 小时前
《Linux运维总结:Ubuntu 22.04配置chrony时间同步服务》
linux·运维·ubuntu·chrony
刘程佳1 小时前
Ubuntu 系统没有识别 Pixel 6 的 USB 设备权限
linux·运维·ubuntu
wa的一声哭了1 小时前
矩阵分析 单元函数矩阵微积分和多元向量值的导数
linux·c语言·c++·线性代数·算法·矩阵·云计算
陈葛杰1 小时前
VMware 安装 Rocky Linux 9.6(Minimal 版)超详细图文教程|轻量 · 安全 · 生产级
linux·运维·服务器