共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。
步骤:创建——打开——映射——分离——删除
1、Shmget
作用:在内核中创建共享内存
原理:int shmget ( key_t key, int size, int shmflg )
参数:key: 键值,可以用IPC_PRIVATE来规定私有键值
Size:表示创建内存的大小
Shmflag:同open函数的权限
返回值:成功:共享内存标识符
出错:-1
头文件:#include<sys/ipc.h>
#include<sys/shm.h>
2、Shmat
作用:映射共享内存,映射到各自的内存空间
原型:char * shmat ( int shmid, char *shmaddr, int flag);
参数:shmid :内存标识符
Shmaddr:映射到的指定地址,若为NULL,则为内核自动分配的地址
Shmflag:SHM_RDONLY:共享内存只读
0:共享内存可读写
返回值:成功:被映射的段地址,出错为-1;
头文件:#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
3、Shmdt
作用:撤销共享内存的映射
原型:int shmdt ( char *shmaddr )
参数:shmaddr:被映射的共享内存地址
返回值:成功0,出错-1
向内存中写东西:
从内存中读程序:
跟管道相比显著的不同就在于,管道没有先建立而直接写的是有问题的,会读取不出来;而共享内存是将数读在内存中,先读后写,也可以读出之前写的值。