fp_opendev 内核服务

用途

打开设备特殊文件。

语法

#include <sys/types.h>
#include <sys/errno.h>
int fp_opendev (devno,flags,cname, ext, fpp)
dev_tdevno;
int  flags;
caddr_t cname;
ext_t  ext;
struct file** fpp;

参数

描述
德夫诺 指定要打开的设备驱动程序的主要和次要设备号。
标记 指定下列其中一个值:
DREAD
正在打开设备以仅进行读取。
DWRITE
正在打开该设备以进行写入。
DNDELAY
正在以非阻塞方式打开该设备。
cname 指向用于指定字符串或空值的通道。
分机 指定某些设备驱动程序需要的扩展参数。 其内容,形式和用途由个人驾驶员自行确定。
fpp 指定返回的文件指针。 此参数通过引用进行传递,并由 fp_opendev 服务更新为该打开实例的文件指针。 此文件指针用作其他逻辑文件系统服务的输入,以指定打开的实例。

描述

内核或内核扩展通过指定其设备主号码和次号码来调用 fp_opendev 内核服务以打开设备。 fp_opendev 内核服务提供了用于打开设备驱动程序的字符或多路复用类的正确语义。

如果未对指定的设备驱动程序进行多路复用:

  • 为该设备找到或创建了核心内索引节点。
  • 索引节点引用计数是按 1 递增的。
  • 设备驱动程序的 德开放 入口点是使用 德夫诺德夫旗扩展 参数调用的。 对 德开放 例程的调用上未使用的 0 设置为 0。

如果设备驱动程序是多路复用字符设备驱动程序 (即,定义了它的 邓普克斯 入口点) ,那么将为此通道创建核心内索引节点。 如果不为空,也会使用指向通道标识字符串的 cname 指针来调用设备驱动程序的 邓普克斯 例程。 如果 cname 指针为空,那么会使用指向空字符串的指针来调用 邓普克斯 设备驱动程序例程。

如果设备驱动程序可以分配通道,那么 邓普克斯 例程将返回一个通道标识,由 参数表示。 如果设备驱动程序无法分配通道,那么 菲普Opendev 内核服务会返回 ENXIO 错误代码。 如果成功,那么索引节点引用 1 将递增 1。 还可以使用 德夫诺 (由 邓普克斯 例程提供) 和 扩展 参数来调用设备驱动程序 德开放 例程。

如果来自指定设备驱动程序 德开放 例程的返回值为非零值,那么会将其作为 fp_opendev 内核服务的返回码返回。 如果来自设备驱动程序 德开放 例程的返回 0 为 0 ,那么 fp_opendev 服务将返回对应于设备的此打开操作的文件指针。

fp_opendev 内核服务只能在进程环境或设备驱动程序的上半部分中调用。 中断处理程序无法调用它。 假定 fp_opendev 内核服务的所有参数都位于内核空间中。

fp_opendev 内核服务所返回的文件指针 (弗普) 仅适用于逻辑文件系统服务的子集。 这 9 个服务可以叫做:

其他服务会返回 EINVAL 返回值 (如果调用)。

执行环境

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

返回值

描述
重大安全事件数量 指示操作成功。

*弗普 字段还指向与其他逻辑文件系统服务配合使用时有效的开放式文件结构。 如果发生错误,那么将返回 /usr/include/sys/errno.h 文件中的下列其中一个值:

描述
EINVAL 指示 德夫诺 参数的主要部分超过所允许的最大数目,或者 标志 参数无效。
ENODEV 表明该设备不存在。
EINTR 指示在处理 fp_opendev 请求时捕获到该信号。
ENFILE 指示系统文件表已填满。
ENXIO 指示设备已多路复用,并且无法分配通道。

fp_opendev 服务还会返回从设备驱动程序 德开放 例程返回的任何非零返回码。