kmsgget 内核服务

用途

获取消息队列标识。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/msg.h>

int kmsgget ( key,  msgflg,  msqid)
key_t key;
int  msgflg;
int *msqid;

参数

表 1. 参数
描述
key 指定 IPC_PRIVATE 的值或由 ftok 子程序(或类似算法)构建的 IPC 密钥。
消息 指定通过对以下一个或多个值进行逻辑 OR 运算来构造 消息 参数:
IPC_CREAT
创建数据结构 (如果它尚不存在)。
IPC_EXCL
如果 kmsgget 也被设置且数据结构已经存在,则会导致 IPC_CREAT 内核服务失败。
S_IRUSR
允许拥有数据结构的进程对其进行读取。
S_IWUSR
允许拥有该数据结构的进程对其进行修改。
S_IRGRP
允许与数据结构关联的进程组读取该进程组。
S_IWGRP
允许与数据结构关联的进程组对其进行修改。
S_IROTH
允许其他用户读取该数据结构。
S_IWOTH
允许其他用户修改该数据结构。

S_I 开头的值... 是在 /usr/include/sys/stat.h 文件中定义的。 它们是适用于文件的访问权限的子集。

msqid 一个引用参数,如果 kmsgget 内核服务成功,将返回一个有效的消息队列 ID。

描述

kmsgget 内核服务会返回消息队列标识符,该标识符由与指定的 key 参数值相关联的 msqid 参数指定。 kmsgget 内核服务为 内核模式下的用户模式进程提供的功能,与 msgget 子程序为 用户模式下的内核进程或用户模式进程执行的功能相同。 kmsgget 服务可由内核模式下的用户模式进程或内核进程调用。 内核进程也可以调用 msgget 子程序来提供相同的功能。

执行环境

kmsgget 内核服务只能从 进程环境中调用。

返回值

表 2. 返回值
描述
0 指示成功完成。 姆斯基德 参数被设置为有效的消息队列标识。

如果 kmsgget 内核服务失败,则 msqid 参数无效,返回代码为以下四个值之一:

描述
EACCES 指示存在 钥匙 参数的消息队列标识,但无法授予 消息 参数指定的操作许可权。
ENOENT 表示不存在 key 参数的消息队列 ID,且未设置 IPC_CREAT 命令。
ENOSPC 指示将创建消息队列标识,但将超过系统对系统范围内允许的最大消息队列标识数施加的限制。
EEXIST 表示 key 参数指定的值存在消息队列 ID,且 IPC_CREATIPC_EXCL 命令都已设置。