2.4.1. 數字電視前端 open()

2.4.1.1. 名稱

fe-open - 開啟前端裝置

2.4.1.2. 概要

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

2.4.1.3. 引數

device_name

要開啟的裝置。

flags

開啟標誌。訪問可以是 O_RDWRO_RDONLY

允許使用 O_RDONLY 進行多次開啟。 在此模式下,僅允許查詢和讀取 ioctl。

O_RDWR 中僅允許開啟一次。 在此模式下,允許所有 ioctl。

當給定 O_NONBLOCK 標誌時,當沒有資料可用或裝置驅動程式暫時繁忙時,系統呼叫可能會返回 EAGAIN 錯誤程式碼。

其他標誌無效。

2.4.1.4. 描述

此係統呼叫開啟一個命名的前端裝置 (/dev/dvb/adapter?/frontend?) 以供後續使用。 通常,成功開啟後的第一件事是透過 ioctl FE_GET_INFO 找出前端型別。

裝置可以在只讀模式下開啟,只允許監視裝置狀態和統計資訊;也可以在讀/寫模式下開啟,允許任何型別的使用(例如執行調諧操作)。

在具有多個前端的系統中,通常情況是多個裝置不能同時在讀/寫模式下開啟。 只要前端裝置在讀/寫模式下開啟,其他在讀/寫模式下的 open() 呼叫將失敗或阻塞,具體取決於是否指定了非阻塞模式或阻塞模式。 在阻塞模式下開啟的前端裝置可以使用 fcntl 系統呼叫的 F_SETFL 命令稍後置於非阻塞模式(反之亦然)。 這是一個標準的系統呼叫,記錄在 fcntl 的 Linux 手冊頁中。 當 open() 呼叫成功後,裝置將準備好在指定的模式下使用。 這意味著相應的硬體已啟動,並且可能已關閉其他前端以使其成為可能。

2.4.1.5. 返回值

成功時 open() 返回新的檔案描述符。 出錯時,返回 -1,並適當設定 errno 變數。

可能的錯誤程式碼是

成功時返回 0,並且 ca_slot_info 已填充。

出錯時返回 -1,並適當設定 errno 變數。

EPERM

呼叫者無權訪問裝置。

EBUSY

裝置驅動程式正在使用中。

EMFILE

程序已開啟最大檔案數。

ENFILE

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

通用錯誤程式碼在通用錯誤程式碼一章中描述。