没有合适的资源?快使用搜索试试~ 我知道了~
共享内存+互斥量实现linux进程间通信.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 139 浏览量
2022-07-12
02:53:26
上传
评论
收藏 37KB DOCX 举报
温馨提示
。。。
资源推荐
资源详情
资源评论
共享内存+互斥量实现 linux 进程间通信
一、 共享内存简介
共享内存是进程间通信中高效方便的方式之一。共享内存允许两个或更多进程访问同一
块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针,两个进
程可以对一块共享内存进行读写。
共享内存并未提供进程同步机制,使用共享内存完成进程间通信时,需要借助互斥量或
者信号量来完成进程的同步。这里说一下互斥量与信号量的区别。互斥量用于线程的互斥,
信号量用于线程的同步,这是互斥量与信号量的本质区别,其次信号量实现互斥量的功能。
本文结合个人实际项目需求,采用互斥量实现进程间访问共享内存的互斥,即同一时刻
只能允许一个进程对共享内存进行写操作。
二、使用系统调用完成共享内存的申请、连接、分离和删除
共享内存函数由 shmget、shmat、shmdt、shmctl 四个函数组成。使用时需要包含
#include
<sys/ipc.h>、#include <sys/shm.h>、#include <sys/types.h>和。
1.共享内存的申请
使用 shmget()完成共享内存的申请,函数原型如下:
int shmget(key_t key, size_t size, int shmflg);
key:共享内存的标识符,大于 0的 32 位整数。若是父子关系的进程间通信,这个标识符用 IPC_PRIVATE,
若进程没有关系,可自行定义。
size:共享内存大小,单位 Byte。
shmflg:共享内存的模式(mode),包括三部分,第一部分是:无指定标示符的共享内存是否创建,由
0(只获取)或 IPC_CREAT(未创建则新建)决定。第二部分:IPC_EXCL(若已创建,则报错)。第三部
分:权限标识,由八进制表示,如 0640,第一个 0 是八进制数标识,第一个 6(4+2)表示拥有者的权限
读和写,第二个 4 表示同组权限写,第 3 个 0 表示他人的权限。这三部分由算数或运算符|拼接组成 shmflg,
如 IPC_CREAT|0640。
成功时返回共享内存的 ID,失败时返回-1。
2.共享内存的连接
使用 shmat()函数将已经申请好的共享连接到当前进程的地址空间,函数原型如下:
void *shmat(
int
shmid, const void *shmaddr,
int
shmflg);
shmid:共享内存标识符。
shmaddr:指定进程使用共享内存的起始地址,直接指定为 NULL让内核自己决定一个合适的地址位置。
shmflg:SHM_RDONLY为只读模式,其他为读写模式,通常设置为 NULL。
成功时,这个函数返回共享内存的起始地址。失败时返回-1。
3.共享内存的分离
使用 sdmdt()函数将已连接的共享内存与进程分离,功能与
int shmdt(const void *shmaddr);
shmat()相反,函数原型如下:
shmaddr:连接的共享内存的起始地址。成功时返回 0。失败时返回-1。
4.共享内存的删除
shmctl() 控制对这块共享内存的使用,包括删除。函数原型如下:
int shmctl(int shmid, int command, struct shmid_ds *buf);
shmid:共享内存的 ID。
command:是控制命令,IPC_STAT(获取共享内存的状态)、IPC_SET(改变共享内存的状态)IPC_RMID
(删除共享内存)。
1
资源评论
- 刘神~2023-06-19资源中能够借鉴的内容很多,值得学习的地方也很多,大家一起进步!
G11176593
- 粉丝: 6874
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用NetBeans连接SQLserver2008数据库教程中文WORD版最新版本
- XPath实例中文WORD版最新版本
- XPath语法规则中文WORD版最新版本
- XPath入门教程中文WORD版最新版本
- ORACLE数据库管理系统体系结构中文WORD版最新版本
- Sybase数据库安装以及新建数据库中文WORD版最新版本
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本
- MyEclipse连接MySQL的方法中文WORD版最新版本
- MyEclipse中配置Hibernate连接Oracle中文WORD版最新版本
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功