7.69. V4L2 open()

7.69.1. 名称

v4l2-open - 打开一个 V4L2 设备

7.69.2. 概要

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

7.69.3. 参数

device_name

要打开的设备。

flags

打开标志。访问模式必须是 O_RDWR。这只是一个技术细节,输入设备仍然只支持读取,输出设备只支持写入。

当给出 O_NONBLOCK 标志时,read() 函数和 VIDIOC_DQBUF ioctl 将在没有数据可用或驱动程序传出队列中没有缓冲区时返回 EAGAIN 错误代码,否则这些函数将阻塞,直到数据可用。所有与应用程序交换数据的 V4L2 驱动程序都必须支持 O_NONBLOCK 标志。

其他标志无效。

7.69.4. 描述

要打开一个 V4L2 设备,应用程序需要使用所需的设备名称调用 open()。此函数没有副作用;所有数据格式参数、当前输入或输出、控制值或其他属性保持不变。在加载驱动程序后的第一次 open() 调用时,它们将被重置为默认值,驱动程序永远不会处于未定义状态。

7.69.5. 返回值

成功时,open() 返回新的文件描述符。如果出错,则返回 -1,并且 errno 变量被适当地设置。可能的错误代码有:

EACCES

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

EBUSY

驱动程序不支持多重打开,并且该设备已被使用。

ENODEV

未找到设备或已被移除。

ENOMEM

没有足够的内核内存来完成请求。

EMFILE

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

ENFILE

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