编程接口指南

IPC 接口、密钥参数以及创建标志

请求访问 IPC 功能的进程必须能够标识此功能。 要标识进程请求访问的功能,初始化 IPC 功能或提供 IPC 功能访问权限的接口应使用 key_t key 参数。 key 为任意值,或者为运行时能从通用种子派生的值。 派生此类密钥的一种方法是使用 ftok(3C),它可将文件名转换为在系统内具有唯一性的密钥值。

初始化消息、信号量或共享内存或者获取消息、信号量或共享内存访问权限的接口将返回类型为 int 的 ID 号。 执行读取、写入以及控制操作的 IPC 接口使用此 ID。

如果将密钥参数指定为 IPC_PRIVATE,则此调用会初始化创建进程专有的新 IPC 功能实例。

在适用于此调用的标志参数中提供 IPC_CREAT 标志时,如果此功能不存在,则接口会尝试创建此功能。

当使用 IPC_CREATIPC_EXCL 标志进行调用时,如果此功能已存在,则接口便会失败。 当多个进程可能尝试初始化此功能时,此行为会非常有用。 这样一个案例可能会涉及多个具有相同功能访问权限的服务器进程。 如果它们都尝试在 IPC_EXCL 生效的情况下创建此功能,则只有第一个尝试会成功。

如果没有提供上述任一标志并且此功能已存在,则接口会返回此功能的 ID 以获取访问权限。 如果省略了 IPC_CREAT 并且尚未初始化此功能,则调用会失败。

将逻辑(按位)ORIPC_CREATIPC_EXCL 与八进制权限模式组合使用,以形成标志参数。 例如,以下语句将在队列不存在的情况下初始化一个新消息队列:

msqid = msgget(ftok("/tmp", 'A'), (IPC_CREAT | IPC_EXCL | 0400)); 

第一个参数基于字符串 ("/tmp") 取值为密钥 ('A')。 第二个参数取值为组合的权限和控制标志。