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 错误。