共享存储函数
2015-08-09 15:57
239 查看
共享存储
共享存储允许两个或多个进程共享一个给定的存储区。数据不需要在客户进程
和服务器进程之间复制,因此这是最快的一种进程间通信的方式。使用的窍门是
多个进程访问存储区时,需要采取一定的同步控制。
获取一个共享存储标志:shmget函数
#include<sys/shm.h>
int shmget(key_t key, size_t szie, inf flag);
成功--共享存储ID,出错-- -1
参数:
key -- IPC对象对应的键
size -- 共享存储段的长度,以字节位单位,通常为系统页长的整数倍。
flag -- 共享存储段的权限
对共享存储段的控制:shmctl函数
#include<sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
成功--0,出错-- -1
参数:
cmd -- 1)IPC——STAT 将此段的shmid_ds结构存储到buf数组里面。
2)IPC_SET 将buf结构里面的值设置到本段相关的shmid_ds结构中的
shm_perm.uid,shm_perm.gid 和 shm_perm.mode.此操作只能是有效
用户ID等于shm_perm.cuid 或 shm_perm.uid 或超级用户。
3)IPC_RMID 从系统中删除该共享存储段。除非该段的最后一个进程结束
或与该段分离,否则不会真正删除这个段。不管此段是否还在使用,该
此操作只能是有效用户ID等于shm_perm.cuid 或 shm_perm.uid 或超级用户。
连接到共享存储段的地址空间去:shmat函数
#include<sys/shm.h>
void *shmat(int shmid,const void *addr,int flag);
成功--指向共享存储段的指针,出错-- -1
调用成功后,shmid_ds结构的shm_nattch计数器加1
参数:
addr -- 0,由内核选择第一个可用的地址
flag -- SHM_RDONLY,以只读的方式连接此段
否则,以读写的方式连接此段
进程分离共享存储段:shmdt函数
#include<sys/shm.h>
int shmdt(const void *addr);
成功--0,出错-- -1
调用成功后,shmid_ds结构的shm_nattch计数器减1
匿名存储映射
使用mmap函数实现,调用mmap函数时指定MAP_ANON,文件描述符指定为 -1.
area = mmap(0,SIZE,PROT_READ|PROT_WRITE,MAP_ANON|MAP_SHARED,-1,0);
共享存储允许两个或多个进程共享一个给定的存储区。数据不需要在客户进程
和服务器进程之间复制,因此这是最快的一种进程间通信的方式。使用的窍门是
多个进程访问存储区时,需要采取一定的同步控制。
获取一个共享存储标志:shmget函数
#include<sys/shm.h>
int shmget(key_t key, size_t szie, inf flag);
成功--共享存储ID,出错-- -1
参数:
key -- IPC对象对应的键
size -- 共享存储段的长度,以字节位单位,通常为系统页长的整数倍。
flag -- 共享存储段的权限
对共享存储段的控制:shmctl函数
#include<sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
成功--0,出错-- -1
参数:
cmd -- 1)IPC——STAT 将此段的shmid_ds结构存储到buf数组里面。
2)IPC_SET 将buf结构里面的值设置到本段相关的shmid_ds结构中的
shm_perm.uid,shm_perm.gid 和 shm_perm.mode.此操作只能是有效
用户ID等于shm_perm.cuid 或 shm_perm.uid 或超级用户。
3)IPC_RMID 从系统中删除该共享存储段。除非该段的最后一个进程结束
或与该段分离,否则不会真正删除这个段。不管此段是否还在使用,该
此操作只能是有效用户ID等于shm_perm.cuid 或 shm_perm.uid 或超级用户。
连接到共享存储段的地址空间去:shmat函数
#include<sys/shm.h>
void *shmat(int shmid,const void *addr,int flag);
成功--指向共享存储段的指针,出错-- -1
调用成功后,shmid_ds结构的shm_nattch计数器加1
参数:
addr -- 0,由内核选择第一个可用的地址
flag -- SHM_RDONLY,以只读的方式连接此段
否则,以读写的方式连接此段
进程分离共享存储段:shmdt函数
#include<sys/shm.h>
int shmdt(const void *addr);
成功--0,出错-- -1
调用成功后,shmid_ds结构的shm_nattch计数器减1
匿名存储映射
使用mmap函数实现,调用mmap函数时指定MAP_ANON,文件描述符指定为 -1.
area = mmap(0,SIZE,PROT_READ|PROT_WRITE,MAP_ANON|MAP_SHARED,-1,0);
相关文章推荐
- HDOJ1009
- python 标准库-argparse 学习
- NOJ1032 三角形数(大数模板)
- [JLOI2013]卡牌游戏
- ZigZag Conversion
- 20150809训练题
- 仿支付宝/微信的密码输入框效果GridPasswordView解析
- ubuntu查看系统日志及相关文件介绍
- 零基础学python-目录
- Android横竖屏切换
- Java设计模式 -- 简单工厂模式(SimpleFactory)
- 零基础学python-目录
- php实现多城市切换特效
- A Simple Problem with Integers
- HDU4081 Qin Shi Huang's National Road System(次小生成树)
- POJ 2408 Anagram Groups(字典树hash)
- PowerDesigner给两个表添加reference,中间显示外键信息步骤
- crontab的相关设置&linux定时备份数据库
- hdu 5365 (bc #50 1002 )Run
- 怎么快速的向织梦添加文章