1.共享内存是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存
区域写入了数据,共享这个内存区域的所有进程就可以立刻
2.看到其中的内容。
共享内存实现分为两个步骤:
(1)创建共享、打开共享内存,使用shmget函数。
(2)映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。(3)分离共享内存。
(4)控制、删除共享内存。
3.共享内存实现的步骤:
(1)创建共享内存,这里用到的函数是shmget,也就是从内存中获得一段共享内存区域。
(2)映射共享内存,也就是把这段创建的共享内存映射到具体的进程空间中去,这里使用的函数是shmat。
(3)到这里,就可以使用这段共享内存了,也就是可以使用不带缓冲的I/O读写命令对其进行操作。
(4)撤销映射的操作,其函数为shmdt。
4.有关共享内存操作的几个函数:(1) shmget
函数的作用:创建共享内存
函数的原型:int shmget(key_t key, int size, int shmflg);
函数的参数:key: 键值,多个进程可以通过访问它访问同一个共享内存,其中有个特殊值IPC_PRIVATE,它用于创
建当前进程的私有共享内存。
size:内存大小;
shmflg:open函数的权限位
返回值: 成功,返回共享内存标识符;失败-1;
头文件: #include <sys/ipc.h>#include <sys/shm.h>
#include <sys/types.h>
(2)shmat
函数的作用:映射共享内存到各自的进程
函数的原型:char * shmat(int shmid, char *shmaddr, int flag);
函数的参数:shmid:shmget函数返回的共享存储标识符;
shmaddr:指定的共享内存映射的地址;如果是NULL,有内核自动分配;
flag:决定以什么方式来确定映射的地址,通常是0,0表示可读写,SHM_RDONLY共享内存只读;
返回值:成功返回映射的地址,出错-1;(3)shmdt
函数的作用:从进程中分离共享内存;
函数的原型:int shmdt(const char *shmaddr);
返回值: 成功是0,出错-1;