共享内存share memory
是一种通信效率最高的进程间通信方式,
进程间通信时直接访问内存,不需要进行数据的拷贝
ipcs -m 查看当前共享内存
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
步骤:
1. ftok
2. shmget
3. shmat
4.进程间通信fork
5. shmdt
6. shmct1
int shmget(key_t key,size_t size,int shmf1g);
功能:创建一个共享内存
参数:
key: ftok的返回值 or IPC_PRIVATE
size:内存大小 (自己写大小,1024bytes 4096bytes都行)
shmf1g:
IPC_CREAT |0666
返回值:
成功: shmid
失败:-1
void *shmat(int shmid,const void *shmaddr,intshmf1g);
功能:映射
参数:
shmid: shmget的返回值
shmaddr:NULL 自动完成映射
shmf1g:
SHM_RDONLY:只读
0:读写
返回值:
成功:地址
失败:NULL
int shmdt(const void *shmaddr);
功能:解除映射
参数:
shmaddr: shmat函数的返回值
返回值:
成功:0
失败:-1
int shmctl(int shmid,int cmd,struct shmid_dsbuf);
功能:控制函数
参数:
shmid: shmget函数的返回值
cmd: IPC_RMID 删除共享内存
buf: NULL
返回值:
成功:0
失败:-1
例:亲缘进程的内存共享