enque 内核服务

用途

将请求队列元素发送至设备队列。

语法

#include <sys/types.h> #include <sys/errno.h> #include <sys/deviceq.h> 内部 (int enque) ) struct req_qe *;

参数

描述
指定该请求队列元素的地址。

描述

恩克 内核服务不是基础内核的一部分,而是由设备队列管理内核扩展提供的。 在装入引用这些服务的任何内核扩展之前,必须将此队列管理内核扩展装入到内核中。

恩克 服务将队列元素放入指定的设备队列中。 它用于内核内部的简单进程间通信。 请求者构建队列元素的副本 (由 参数指示) ,并将此副本传递到 恩克 服务。 内核将此队列元素复制到固定全局内存中的队列元素中,然后将其排队到目标设备队列中。

请求队列元素中的路径标识指示将该元素放入其中的设备队列。

恩克 服务支持下列类型的队列元素的发送:

队列元素 (queue element) 描述
SEND_CMD 发送命令。
启动 IO 启动 I/O。
源用途 一般用途。

对于简单的进程间通信,使用通用队列元素。

队列元素优先级值的范围可以从 QE_BEST_PRTYQE_WORST_PRTY。 此值将限制为创建队列时指定的值。

队列元素中的操作选项用于控制队列元素的处理方式。 有五个标准操作选项:

操作选项 描述
已确认完成 在所有情况下都确认完成。
ACK_ERRORS 如果操作导致错误,那么确认完成。
同步请求 同步请求。
链式 链式控制块。
CONTROL_OPT 内核控制操作。
注: 只能指定 已确认完成 ACK_ERRORSSYNC_REQUEST 中的某个值。 此外,如果路径指定不应发送任何应答 (NO_ACK) ,那么会忽略所有这些选项。

使用 SYNC_REQUEST 同步请求选项时,直到确认请求队列元素之后,控制才会从 恩克 服务返回。 这在一个步骤中执行,也可以通过发送带有 已确认完成 标志的队列元素,然后调用 等待等待 内核服务来实现此目的。

在将队列元素放置在设备队列上之前,内核将调用服务器的 检查 例程 (如果已定义)。 如果此例程检测到错误,那么它可以停止该操作。

必要时,内核会在将队列元素放置在设备队列上后通知设备队列的服务器。 这是通过将服务器进程 (使用 et_post 内核服务) 与事件控制位一起发布来完成的。

执行环境

仅可从 流程环境 调用 恩克 内核服务。

返回值

描述
RC_GOOD 指示操作成功。
RC_ID 指出无效的路径标识。

所有其他错误值表示服务器返回的错误。