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

系統上開啟的檔案總數的限制已達到。