共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据,而是直接使用内存中的共享区。
我们接下来认识一下常用的接口
接口shmget 创建共享内存需要同时引入<sys/ipc.h> <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg);
key 是生成共享内存标示符的 关键字,唯一的key值能返回唯一的共享内存标示符,这是获得同一个共享内存的关键参数
size是指共享内存的大小,按字节算
shmflg是一个位图,控制创建时的行为和 共享内存文件的权限(缺省时为0),常见选项如下
IPC_CREAT:单独一个时,如果申请的共享内存不存在,就创建,然后返回;若存在,则获取并返回
IPC_CREAT | IPC_EXCL: 如果申请的共享内存不存在,则创建;若存在,则出错并返回-1
IPC_EXCL:不能单独使用
IPC_CREAT | 0666:创建一个权限为0666的共享内存文件,注: ...