1.概述
System V IPC的三种类型:
System V消息队列
System V信号量
System V共享内存区
2.key_t键和ftok函数
三种类型的System V IPC使用key_t键作为它们的名字,key_t在头文件<sys/types.h>定义,通常至少为32位整数值。
函数ftok把一个已存在的路径名和一个整数标识符转换成一个key_t值,称为IPC键。
ftok的典型实现调用stat函数,然后组合以下三个值:
pathname所在的文件系统的信息(stat结构的st_dev成员)
该文件在文件系统的索引节点号(stat结构的st_ino成员)
id的低序8位(不能为0)
由此,id在IPC键的高序8位,st_dev的低序12位IPC在键的接下来的12位,st_ino的低序12位在最后
3.ipc_perm结构
内核给每个IPC对象维护一个信息结构,其内容跟内核给文件维护的信息类似。该结构以及System V IPC函数使用的较为明显的常数值定义在<sys/ipc.h>头文件中。
4.创建与打开IPC通道
创建或打开IPC对象有三个函数:msgget、semget、shmget,它们的第一个参数类型为key_t,对于key值应用程序有两种选择:
调用ftok,给它传递pathname和id。
指定key为IPC_PRIVATE,这将保证创建一个新的、唯一的IPC对象。
getXXX函数都有一个名为oflag的参数,这个参数可以创建一个新的IPC对象也可以访问一个已存在的IPC对象,具体规则如下:
5.IPC权限设置oflag参数的IPC_CREATE位但不设置它的IPC_EXCL位,如果所指定的IPC对象不存在,就创建一个新的对象,否则返回该对象。
同时设置oflag的IPC_CREATE和IPC_EXCL位时,如果所指定键的IPC对象不存在,就创建一个新的对象,否则返回一个EEXIST错误。
6.ipcs和ipcrm程序与Posix的IPC权限大体相同
ipcs输出有关System V IPC特性的各种信息,ipcrm则删除一个System V消息队列、信号量集或共享内存区。