2.4.1. 数字电视前端 open()

2.4.1.1. 名称

fe-open - 打开一个前端设备

2.4.1.2. 概要

#include <fcntl.h>
int open(const char *device_name, int flags)

2.4.1.3. 参数

device_name

要打开的设备。

flags

打开标志。访问可以是 O_RDWRO_RDONLY

允许使用 O_RDONLY 多次打开。在此模式下,仅允许查询和读取 ioctl。

只允许一个以 O_RDWR 模式打开。在此模式下,允许所有 ioctl。

当给定 O_NONBLOCK 标志时,当没有数据可用或设备驱动程序暂时繁忙时,系统调用可能会返回 EAGAIN 错误代码。

其他标志无效。

2.4.1.4. 描述

此系统调用打开一个命名的前端设备(/dev/dvb/adapter?/frontend?)以供后续使用。通常,在成功打开后要做的第一件事是使用 ioctl FE_GET_INFO 找出前端类型。

该设备可以在只读模式下打开,该模式只允许监视设备状态和统计信息;也可以在读/写模式下打开,该模式允许任何类型的用途(例如,执行调谐操作)。

在具有多个前端的系统中,通常情况是多个设备不能同时以读/写模式打开。只要一个前端设备以读/写模式打开,其他 open() 在读/写模式下的调用将会失败或阻塞,具体取决于是否指定了非阻塞或阻塞模式。以阻塞模式打开的前端设备稍后可以使用 fcntl 系统调用的 F_SETFL 命令将其置于非阻塞模式(反之亦然)。这是一个标准的系统调用,记录在 fcntl 的 Linux 手册页中。当一个 open() 调用成功后,该设备将准备好以指定的模式使用。这意味着相应的硬件已通电,并且为了实现这一点,可能已经关闭了其他前端的电源。

2.4.1.5. 返回值

成功时,open() 返回新的文件描述符。如果出错,则返回 -1,并且会相应地设置 errno 变量。

可能的错误代码是

成功时返回 0,并且 ca_slot_info 被填充。

如果出错,则返回 -1,并且会相应地设置 errno 变量。

EPERM

调用者没有权限访问该设备。

EBUSY

设备驱动程序正在使用中。

EMFILE

该进程已打开最大数量的文件。

ENFILE

系统上打开的文件总数已达到上限。

通用错误代码在 通用错误代码 章节中描述。