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
系统上打开的文件总数的限制已达到。