ddioctl 设备驱动程序入口点

用途

执行 ioctlIoctlx 子例程调用中请求的特殊 I/O 操作。

语法

#include <sys/device.h>
int ddioctl (devno, cmd, arg, devflag, chan, ext)
dev_t  devno;
int  cmd;
void *arg;
ulong  devflag;
chan_t  chan;
int  ext;

描述

当程序发出 ioctlIoctlx 子例程调用时,内核会调用指定设备驱动程序的 迪奥克特尔 例程。 迪奥克特尔 例程负责执行所请求的所有功能。 此外,它还必须返回由 ioctl 子例程的原始调用者指定的任何控制信息。 命令 参数中包含要执行的操作的名称。

大多数 ioctl 操作取决于所涉及的特定设备。 但是,所有 ioctl 例程都必须响应以下命令:

描述
IOCINFO 返回描述设备的 devinfo 结构 (在 /usr/include/sys/devinfo.h 文件中定义)。 (请参阅 "应用程序编程接口" 中对特定设备的特殊文件的描述。) 仅当结构的剩余字段不适用于设备时,才需要返回数据结构的前两个字段。

德夫旗 参数指示多种类型的信息中的一种。 它可以提供打开设备时的条件。 (这些条件随后可以通过 弗纳特尔 子例程调用进行更改。) 或者,它可以指示调用入口点的两种方式中的哪一种:

  • 由文件系统代表正在使用的应用程序
  • 直接由使用 fp_ioctl 内核服务的内核例程执行

因此, devflag 参数中的标志具有以下定义,如 /usr/include/sys/device.h 文件中所定义:

描述
内核 内核例程使用 fp_ioctl 服务调用的入口点。
DREAD 打开以进行阅读。
DWRITE 打开以进行编写。
DAPPEND 打开以进行追加。
DNDELAY 设备以非阻塞方式打开。

参数

描述
德夫诺 指定主要和次要设备号。
cmd 来自 ioctl 子例程调用的参数,用于指定要执行的操作。
arg 来自 ioctl 子例程调用的参数,用于指定 命令 操作的其他自变量。
德夫旗 指定设备打开或文件控制标志。
指定 通道号
分机 指定 扩展参数

执行环境

只有在进程环境中才会执行 迪奥克特尔 例程。 它应该通过将锁定内核服务与驱动程序中定义的专用锁定字结合使用来提供其数据结构的必需序列化。

返回值

迪奥克特尔 入口点可以通过返回非零返回码来向用户方式应用程序指示错误情况。 这将导致 ioctl 子程序返回 -1 值,并在 errno 全局变量中向用户模式应用程序提供返回代码。 使用的错误代码应是 /usr/include/sys/errno.h 文件中定义的值之一。

如果适用,应使用 ioctl 子例程的 POSIX 1003.1 标准中定义的返回值。