进程间通信----------共享内存

匿名 (未验证) 提交于 2019-12-03 00:22:01

共享内存就是借助同一块物理内存映射不同的虚拟地址空间,不同的虚拟地址空间代表着不同的进程,所以多个进程都能看到这一块内存,那么就可以同时对这块内存读写操作。
我们画张图感受一下:

共享内存是一块内存,它的数据结构中都有以下数据

shmget函数:用来创建共享内存

int shmget(key_t key,size_t size,int shmflg); //key共享内存段的名字 //size:共享内存大小(返回的大小等于size向上取整到4k的整数倍例如size=4097,那么返回的内存大小为8k即为两页) //shmflg:权限 //返回值:成功返回一个非负整数(内存标识码),失败返回-1;

shmat函数:将共享内存连接到进程地址空间

void* shmat(int shmid,const void* shmaddr,int shmflg); //shmid:共享内存标识码 //shmaddr:连接的地址 //shmflg:有两个取值可能是SHM_RND和SHM_RDONLY //返回值:成功返回一个指针,指向共享内存第一个字节,失败返回-1  ************************************************************** 说明 1、shmaddr为NULL,内核自动选择一个地址 2、不为NULL,如果shmflg设置了SHM_RND标记,那么连接的地址会自动向下调整为SHMLBA的整数倍(shmaddr-(shmaddr%SHMLBA);如果没有设置SHM_RND标记那么shmaddr就是连接的地址。 3、shmflg=SHM_RDONLY,表示连接操作用来只读共享内存

shmdt函数:将共享内存段与当前进程脱离

int shmdt(const void* shmaddr); //shmaddr:是shmat返回的shmaddr //返回值:失败返回-1,成功返回0 <font color=red>注意:</td>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!