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