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

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

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