栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【Linux | 项目】数据加密传输平台(二、组件开发——统一共享内存组件)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Linux | 项目】数据加密传输平台(二、组件开发——统一共享内存组件)

组件开发 统一共享内存读写组件

常用底层API:

  • int shmget(key_t key, size_t size, int shmflg);获取一块共享内存。参数key为非016进制数,描述共享内存状态;size为共享内存大小;shmflg为表示共享内存状态。返回int类型的shmid
  • void *shmat(int shmid, const void *shmaddr, int shmflg);获取指定共享内存的操作指针。参数shmid为共享内存ID标识;shmaddr为用户指定的共享内存地址,一般传NULL由内核自动分配;shmflg为指定共享内存的权限
  • int shmdt(const void *shmaddr);取消当前进程与共享内存的关联关系。参数shmaddr共享内存的地址,传入shmat的返回值即可
  • int shmctl(int shmid, int cmd, struct shmid_ds *buf);对共享内存进行操作。参数shmid为共享内存ID标识;cmd为命令;buf为传出参数

一般用shmctl的IPC_RMID命令删除未关联任何进程的共享内存。如果被删除的共享内存仍关联其他进程,则共享内存的key值变为0x0000,此时为private私有状态,只能在已经关联的进程中进行通信。共享内存被标记为将要删除的内存,且不能有新的进程关联此共享内存。等到所有关联进程执行结束或者取消与共享内存的关联,即共享内存引用计数为0时自动删除该共享内存

 

Linux内核管理共享内存的方法:

  • key值描述共享内存的状态,0x0000表示private,非0表示shared
  • 引用计数
封装共享内存操作

创建共享内存:int IPC_CreateShm(int key, int shmsize, int *shmhdl);

打开共享内存:int IPC_OpenShm(int key, int shmsize, int *shmhdl);

关联共享内存:int IPC_MapShm(int shmhdl, void **mapaddr);

取消共享内存关联:int IPC_UnMapShm(void *unmapaddr);

删除共享内存:int IPC_DelShm(int shmhdl);

具体实现见myipc_shm.c

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/467405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号