您的位置:首页 > 其它

共享存储函数

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: