unix环境编程 第十五章 15.9 共享存储

共享存储是一种快速的进程间通信(IPC)方式,允许多个进程直接访问同一块内存区域。主要涉及三个关键函数:shmget用于获取共享存储标识符,shmctl进行各种操作如控制权限,而shmat将共享存储段连接到进程的地址空间。当完成操作后,使用shmdt断开连接。理解并正确同步这些操作对于有效利用共享存储至关重要。
摘要由CSDN通过智能技术生成

共享存储允许两个或者多个进程共享一个 给定的存储区。因为数据不需要在客户进程和服务器进程之间复制。所以这是最快的一种IPC。使用共享存储时要掌握的唯一窍门是在多个进程之间同步访问一个给定的存储区。

调用的第一个函数通常是shmget,它获得一个共享存储标识符

#include <sys/shm.h>
int shmget(key_t key,size_t size,int flag);
//成功返回共享存储ID,失败返回-1

参数size是该共享存储段的长度,以字节为单位。

shmctl函数对共享存储段执行多种操作

#include <sys/shm.h>
int shmctl(int shmid,int cmd,struct shmid_ds *buf);
//成功返回0,失败返回-1

一旦创建了一个共享存储段,进程就可调用shmat将其连接到它的地址空间中。

#include <sys/shm.h>
void *shmat(int shmid,cosnt void *addr,int flag);
//成功返回指向共享存储段的指针,出错返回-1

如果addr为0,则此段连接到由内核选择的第一个可用地址上。这是推荐的使用方式

如果addr非0,并且没有指定SHM_RND,则此段连接到addr所指定的地址上。

如果addr非0,并且指定了SHM_RND,则此段连接到所表示的地址上。

当对共享存储段的操作已经结束的时候,则调用shmdt与该段分离。注意,这并不是从系统中删除其标识符以及其相关的数据结构。

#include <sys/shm.h>
int shmdt(const void *addr);
//成功返回0,出错返回-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值