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 从驱动程序的传出队列中取出已填充的(捕获)缓冲区。它们只需使用要排队的缓冲区 ID 设置 index
字段。当使用指向 struct dmx_buffer
的指针调用 DMX_DQBUF
时,驱动程序会填充剩余的字段或返回错误代码。
默认情况下,当传出队列中没有缓冲区时,DMX_DQBUF
会阻塞。当 open()
函数被赋予 O_NONBLOCK
标志时,如果没有可用的缓冲区,DMX_DQBUF
将立即返回 EAGAIN
错误代码。
struct dmx_buffer
结构在 缓冲区 中指定。
3.2.19.5. 返回值¶
成功时返回 0,错误时返回 -1,并且会相应地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
- EAGAIN
已使用
O_NONBLOCK
选择了非阻塞 I/O,并且传出队列中没有缓冲区。- EINVAL
index
超出范围,或者尚未分配任何缓冲区。- EIO
DMX_DQBUF
由于内部错误而失败。也可能表示暂时性问题,例如信号丢失或 CRC 错误。