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 錯誤。