Linux 共享内存介绍
共享内存属于一种进程通信方式,让多个进程通过访问同一块内存实现通信。

整体流程与特点
流程
总的流程分为以下几步:已存在的共享内存通过 Key 直接用即可,不用重新申请。

需要先申请共享内存,然后与它建立联系,不想用了就去除关联,最后看情况释放共享内存即可。
特点
- 共享内存申请之后,如果不主动释放,那它就会等到系统关闭才主动释放。
- 共享内存的通信不会出现阻塞的情况(这是较于两种管道通信最大的区别)。即:可以同时实现数据写入,A 进程不用阻塞等待 B 进程。
- 通信成功的关键是:读写双方必须约定相同的数据类型和解析规则。例如:A 以字符串写入,B 就以字符串读取,如果 B 是整型读取,就会出现乱码。
- 共享内存的释放:由创建者销毁,且创建者标记'销毁'之后,也会等失去所有挂载连接之后才会释放这块共享内存。下面是指令版的查看共享内存和销毁:
ipcs -m 查看所有存在的共享内存
ipcrm -m "共享 ID" 手动直接销毁该共享内存
使用步骤
1. 申请共享内存
共享内存的申请涉及到两个函数:ftok() 与 shmget()。
1. ftok()
函数原型:
#include <sys/ipc.h>
key_t ftok(const char *pathname, int proj_id);
参数:都是自定义的,系统会根据它们调用算法形成唯一的 Key,这个 Key 是较于操作系统的。(只要这两个参数相同,就会生成相同的 Key->进而找到同一块共享内存)
返回值:
- 成功:返回一个
key_t类型的整数(就是生成的'唯一编号') - 失败:返回
-1(比如路径不存在,或权限不够)
作用:生成'唯一标识'较于系统的钥匙 Key。
2. shmget()
函数原型:
#include <sys/shm.h>
int shmget;






