共享内存
是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容.
共享内存实现分为两个步骤:
1、创建共享、打开共享内存,使用shmget函数
2、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数
3. 分离共享内存
4. 控制、删除共享内存
shmget
函数的作用:在内核中创建共享你内存
函数的原型:int shmget(key_t key,int size,int shmflg)
函数的参数:shmflg:标志。同open()函数的权限位,也可以用八进制表示法
返回值:成功共享内存标识符
出错 -1;
头文件:#include<sys/opc.h>
#include<sys/shm.h>
shmat
函数的作用:映射共享内存,映射到各自的内存空间
函数的原型:void *shmat(int shmid,const void *shmaddr,int flag);
函数的参数:shmid:内存标识符;
shmaddr:将共享内存映射到本进程的指定地址,如果为NULL则由内核进行自动分配。
shmflg:SHM_RDONL表示共享内存只读;
为0表示共享内存可读写;
返回值:被映射的段地址;
出错 -1;
头文件:#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
shmdt
函数的作用:撤销内存共享内存的映射;
函数的原型:int shmdt(const void *shmaddr)
函数的参数:shmaddr:被映射的共享内存地址
返回值:成功0;出错-1