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

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