1、标识符和键
标识符是内核为每个IPC结构加以引用的,所以也称标识符是XSI IPC的内部名。键则使多个合作进程能够在同一IPC对象上会合,这是外部名。
2、3种得到键的方式
1)服务器进程可以指定键IPC_PRIVATE创建一个IPC结构,将返回的标识符存放在某处(某个文件)以便客户端程序使用。
2)在一个共用头文件中定义一个客户进程和服务器进程都认可的键。然后服务器进程用这个指定此键创建一个新的IPC结构。但是这里有个问题是,这个键可能已经被一个IPC使用,这样的话,msgget\semget\shmget 就会错误返回。
3)客户端和服务器都认可一个路径名和项目ID(0-255),使用ftok将这两个值变换成一个键。然后服务器使用这里键创建一个IPC结构。
key_t ftok(const char *path,int id);
3、XSI IPC创建必须满足的条件
XSI IPC创建函数msgget\semget\shmget都需要两个类似的参数key_t和一个整形的flag.
在满足下列2个条件之一时,才可能成功创建一个XSI IPC结构。
1)key为IPC_PRIVATE
2)key还没有和一个IPC结构相关联,并且flag指定了IPC_CREAT标志。
如果希望创建一个新队列,而且要确保不是引用具有同一标识符的一个现存IPC结构,那么必须在flag中指定IPC_CREAT和IPC_EXCL位。
4、XSI IPC的访问
消息队列在访问的时候key必须要等于创建该队列的键,并且不应该指定IPC_CREAT和IPC_PRIVATE。
5、XSI IPC结构中的ipc_perm结构
struct ipc_perm
{
uid_t uid; /* owner’s effective user id */
gid_t gid; /* owner’s effective group id */
uid_t cuid; /* creator’s effective user id */
gid_t cgid; /* creator’s effective group id */
mode_t mode; /* access mode */
权限 位
用户读 : 0400
用户写 : 0200
组读 : 0040
组写 : 0020
其他读 : 0004
其他写 : 0002