共享内存实现分为两个步骤:
1.创建共享、打开共享内存,使用shmget函数
2.映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数
3. 分离共享内存
4. 控制、删除共享内存
下面介绍共享内存要用到的函数:
shmget
函数作用:在内核中创建内存
函数原型:int shmget ( key_t key, int size, int shmflg )
函数参数:key 键值 IPC_PRIVATE 私有的键值
size:创建内存大小
shmflg:标志,同open权限
返回值:成功共享的内存标识符;出错-1
头文件:#include<sys/opc.h>
#include <sys/shm.h>
shmat
函数作用:映射共享内存,映射到各自内存空间
函数原型:char * shmat ( int shmid, char *shmaddr, int flag)
函数参数:shmid:内存的标识符
shmaddr:映射共享内存到本进程的指定地址,若为NULL,则由内核进行自动分配
flag:0(默认)可读写;SHM_RDONLY,只读
返回值:被映射的段地址,出错-1
头文件:#include<sys/types.h>
#include<sysy/ipc.h>
#include<sys/shm.h>
shmdt
函数作用:撤销共享内存的映射
函数原型:int shmdt(const void *shmaddr)
函数参数:shmaddr:被映射的共享内存地址
返回值:成功0,出错-1
下面是例子: