liunx中共享内存

实现步骤

创建共享内存区

进程1申请一块共享区域,通过shmget函数生成

映射共享内存到进程1

通过shmat实现

映射共享内存到进程2

通过进程1的shmat函数和同一个key值,执行shmat,将内存映射到进程2

进程1和进程2相互通信

进程自己协商处理

撤销内存映射关系

完成通信,需要撤销映射,使用shmdt函数实现

删除共享内存区

shmctl函数实现

主要函数

shmget

shmget

参数一:key为共享内存命名;
调用成功,发回与key相关的内存标识符(非负整数);调用失败返回-1;
参数二:size以字节为单位指定需要共享的内存容量;
参数三:shmflg为权限标志,共享内存的权限标志同文件的读写权限一样;

shmat

shmat

参数一:shm_id是shmget函数返回的共享内存标识;
参数二:shm_addr指定共享内存连接到当前进程中的地址位置,通常为空,表示让系统来选择共享内存的地址;
参数三:shn_flg为一组标志位,通常为0;

shmdt

shmdt

作用:将共享内存从当前进程中分离,使该共享内存对当前进程不再可用;
其中shmaddr是shmat函数返回的地址指针,调用成功返回0,失败返回-1;

shmctl

shmctl

参数一:shmget函数返回共享内存标识符;
参数二:command可以取三个值
IPC_STAT:把shmid_ds结构中的数据设置为共享内存的当前关联值,即用共享内存的当前关联值覆盖shmid_ds的值;
IPC_SET:如果进程有足够的权限,就把共享内存的当前关联值设置为shmid_ds结构中给出的值;
IPC_RMID:删除共享内存段;
参数三:buf是个结构指针,指向共享内存模式和访问权限的结构;

shmid_ds

shmid_ds

至少包括以上这些

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容