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   

查看共享内存。

相关推荐
Zucker n1 小时前
英语“论文”语法检查工具
linux·windows
苏宸啊1 小时前
Reactor反应堆模式
linux
骇客野人2 小时前
Linux 全套实操方案(含目录详解、文件传输、日志、文件规范、环境变量、Java 应用部署运维)
java·linux·运维
_菜鸟果果2 小时前
高德地图 JS API 2.0 在国产 Linux/ARM 电脑上渲染失败 的排查与解决
linux·开发语言·javascript
GeW2 小时前
飞行汽车交付阿联酋,真正先“起飞”的是低空数据基座——红帽Linux与数据库高可用为什么成了低空运营的隐形跑道
linux
0+1113 小时前
Linux --DNS与ICMP
linux·运维·服务器
bjxiaxueliang3 小时前
一文自建STUN:在Ubuntu上分步搭建STUN服务
linux·运维·ubuntu
高旭的旭3 小时前
图解 Android 系统架构:从 App、Framework、HAL 到 Linux 驱动
android·linux·系统架构
小小、码农4 小时前
[特殊字符]【C++11】类的新功能全面解析:移动构造、移动赋值、default、delete、final 与 override
linux·开发语言·网络·c++
陈让然4 小时前
Ubuntu Podman 容器镜像构建
linux·ubuntu