3.2.19. ioctl DMX_QBUF, DMX_DQBUF

3.2.19.1. 名稱

DMX_QBUF - DMX_DQBUF - 與驅動程式交換緩衝區

警告

此 API 仍然是實驗性的

3.2.19.2. 概要

DMX_QBUF

int ioctl(int fd, DMX_QBUF, struct dmx_buffer *argp)

DMX_DQBUF

int ioctl(int fd, DMX_DQBUF, struct dmx_buffer *argp)

3.2.19.3. 引數

fd

open() 返回的檔案描述符。

argp

指向 struct dmx_buffer 的指標。

3.2.19.4. 描述

應用程式呼叫 DMX_QBUF ioctl 將一個空的(捕獲)或已填充的(輸出)緩衝區排隊到驅動程式的傳入佇列中。語義取決於所選的 I/O 方法。

要將緩衝區排隊,應用程式設定 index 欄位。有效的索引號範圍從零到使用 ioctl DMX_REQBUFS 分配的緩衝區數量(struct dmx_requestbuffers count)減一。由 ioctl DMX_QUERYBUF ioctl 返回的 struct dmx_buffer 的內容也可以。

當使用指向此結構的指標呼叫 DMX_QBUF 時,它會鎖定緩衝區在物理記憶體中的記憶體頁,因此它們無法交換到磁碟。緩衝區保持鎖定狀態,直到出隊,直到裝置關閉。

應用程式呼叫 DMX_DQBUF ioctl 從驅動程式的傳出佇列中取出已填充的(捕獲)緩衝區。它們只需將 index 欄位設定為要排隊的緩衝區 ID。當使用指向 struct dmx_buffer 的指標呼叫 DMX_DQBUF 時,驅動程式會填充剩餘的欄位或返回錯誤程式碼。

預設情況下,當傳出佇列中沒有緩衝區時,DMX_DQBUF 會阻塞。當 O_NONBLOCK 標誌被賦予給 open() 函式時,當沒有可用的緩衝區時,DMX_DQBUF 會立即返回一個 EAGAIN 錯誤程式碼。

struct dmx_buffer 結構在 Buffers 中指定。

3.2.19.5. 返回值

成功時返回 0,出錯時返回 -1,並適當地設定 errno 變數。通用錯誤程式碼在 通用錯誤程式碼 章節中描述。

EAGAIN

已使用 O_NONBLOCK 選擇了非阻塞 I/O,並且傳出佇列中沒有緩衝區。

EINVAL

index 超出範圍,或者尚未分配任何緩衝區。

EIO

DMX_DQBUF 由於內部錯誤而失敗。也可以指示臨時問題,例如訊號丟失或 CRC 錯誤。