共享存储允许两个或者多个进程共享一个 给定的存储区。因为数据不需要在客户进程和服务器进程之间复制。所以这是最快的一种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