kmsgrcv 内核服务
用途
从消息队列中读取消息。
语法
参数
| 项 | 描述 |
|---|---|
| msqid | 指定要从中读取的消息队列。 |
| 消息 | 指向 msgxbuf 或 姆格布夫 结构,消息文本放置在该结构中。 指向的结构的类型由 标志 参数的值确定。 这些结构在 /usr/include/sys/msg.h 文件中定义。 |
| 消息 | 指定要从消息队列中接收的文本的最大字节数。 如果消息长度超过此大小,并且在 消息 参数中设置了 MSG_NOERROR ,那么接收到的消息将截断为 消息 参数指定的大小。 消息的截断部分将丢失,并且不会向调用进程提供截断的指示。 |
| 消息类型 | 指定请求的消息类型,如下所示:
|
| 消息 | 指定值 0 ,或者通过对多个值之一进行逻辑 OR 运算来构造:
|
| 标志 | 如果要执行正常消息接收,那么指定值为 0。 如果要执行扩展消息接收,那么应该将此标志设置为 XMSG 值。 如果设置了此标志,那么 克姆斯格尔茨夫 服务将像 msgxrcv 子例程一样运行。 否则, 克姆斯格尔茨夫 服务将像 姆斯格尔茨夫 子例程一样运行。 |
| 字节 | 指定引用参数。 此参数包含从 克姆斯格尔茨夫 服务返回时从消息队列读取的消息/文本字节数。 如果消息长度超过由 消息 参数字节指定的字节数,但未设置 MSG_NOERROR ,那么 克姆斯格尔茨夫 内核服务将失败并返回 E2BIG 返回值。 |
描述
克姆斯格尔茨夫 内核服务从 姆斯基德 参数指定的队列中读取消息,并将该消息存储到 消息 参数所指向的结构中。 克姆斯格尔茨夫 内核服务为 内核方式 中的用户方式进程提供的功能与 姆斯格尔茨夫 和 msgxrcv 子例程为 用户方式中的内核进程或用户方式进程提供的功能相同。
克姆斯格尔茨夫 服务可以由内核方式下的用户方式进程或由内核进程调用。 内核进程还可以调用 姆斯格尔茨夫 和 msgxrcv 子例程来提供相同的函数。
执行环境
仅可从 流程环境 调用 克姆斯格尔茨夫 内核服务。
返回值
| 项 | 描述 |
|---|---|
| 重大安全事件数量 | 指示操作成功。 |
| EINVAL | 指示由 姆斯基德 参数指定的标识不是有效的消息队列标识。 |
| EACCES | 指示对调用进程的操作许可权被拒绝。 |
| EINVAL | 表示 消息 参数的值小于 0。 |
| E2BIG | 指示消息文本大于由 消息 参数指定的最大长度,并且未设置 MSG_NOERROR 。 |
| ENOMSG | 指示队列未包含所需类型的消息,并且已设置 IPC_NOWAIT 。 |
| EINTR | 指示 克姆斯格尔茨夫 服务已接收到信号。 |
| EIDRM | 指示已从系统中移除由 姆斯基德 参数指定的消息队列标识。 |