UNPv2第十四章:System V共享内存区
2016-04-27 09:33
330 查看
1 shmget函数
#include <sys/shm.h> int shmget(key_t key, size_t size, int oflag) 返回一个共享区标识符
Key既可以是ftok返回值,也可以是IPC_PRIVATE
Size以字节为单位指定内存区大小
2 shmat函数
#include <sys/shm.h> void *shmat(int shmid, const void *shmaddr, int flag)
连接共享内存标识符为shmid的共享内存,连接成功后把共享内存区对象映射到调用进程的地址空间,随后可像本地空间一样访问
如果shmaddr是一个空指针,那么系统调用者选择地址
如果shmaddr是一个非空指针,那么返回地址取决于调用者是否给flag指定SHD_RND:
如果SHD_RND没有指定,那么相应的共享内存区附接到由shmaddr参数指定的地址
如果SHD_RND指定了,那么相应的共享内存区附接到shmaddr参数指定的地址向下舍入一个SHMLBA常值(LBA:低端边界地址)
3 shmdt函数
#include <sys/shm.h> int shmdt(const void *shmaddr); 断开共享内存连接
4 shmctl函数(完成对共享内存的控制)
#include <sys/shm.h> int shmctl(int shmid, int cmd, struct shmid_ds *buf);
cmd有如下取值:
IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中
IPC_SET:改变共享内存的状态,把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存的shmid_ds结构内
IPC_RMID:删除这片共享内存
5 共享内存区的限制
6 小结
System V共享内存区最新常用的函数调用是: shmget获取一个标识符
shmat把一个共享内存区附接到调用进程的地址空间
以一个IPC_STAT命令调用shmctl:获取一个已存在共享内存区的大小
以一个IPC_RMID命令调用shmctl:删除一个共享内存区对象
后记
APUE,UNPv1,UNPv2已经看完了,一些基本的操作还是能看懂的。由于UNP两本书上的有些代码在APUE中已经贴出来了,所以就没有再次粘贴,所以UNP两本书的学习笔记只有一些概念性的介绍,没有代码。有兴趣可以自己买本书或者下载pdf自行查阅相关文章推荐
- GeoTrust 企业(OV)型 多域名(SAN/UC)版 SSL证书
- Java NIO原理
- android+eclipse+jni遇到的一些问题
- 图解 MongoDB 地理位置索引的实现原理(转)
- Java 的几种版本
- 对已有的2个一维数组,譬如说A[],B[],经过最少循环找出2个数组重复的元素。
- activiti5.13 框架 数据库表结构说明
- windows server 2008 新建用户
- 用jboss/tomcat启动socket mina的方式
- java main()函数与其所在类的成员的初始化顺序
- vb.net 实现无标题栏窗体拖拽功能
- [王晓刚]深度学习在图像识别中的研究进展与展望(转发)
- 网页加载速度优化2--先加载css,然后再加载js文件。
- 转载---前端插件推荐
- IAR 单元测试时报告重复定义错误
- Shiro workshop
- easyui DataGrid 的 Checkbox 选择多行
- 定时任务,AlarmManager使用
- javamail接收邮件(较全)工具类
- UITextField 的使用