总结
从 Fifo 中读取数据。
声明
#include <zircon/syscalls.h>
zx_status_t zx_fifo_read(zx_handle_t handle,
size_t elem_size,
void* data,
size_t count,
size_t* actual_count);
说明
zx_fifo_read()
会尝试将最多 count 个元素从 fifo 句柄读取到 data 中。
如果 fifo 中没有足够的元素来满足整个请求,读取的元素可能会少于请求的元素。实际读取的元素数量通过 actual_count 返回。
elem_size 指定的元素大小必须与传入 zx_fifo_create()
的元素大小一致。
data 的大小必须至少为 count * elem_size
个字节。
actual_count 允许为 NULL。这在读取单个元素时非常有用:如果 count 为 1 并且 zx_fifo_read()
返回 ZX_OK
,则 actual_count 一定会为 1,因此可以放心地忽略。
读取零个元素是不合法的。
权限
handle 必须为 ZX_OBJ_TYPE_FIFO
类型,且具有 ZX_RIGHT_READ
。
返回值
zx_fifo_read()
会在成功时返回 ZX_OK
,并通过 actual_count 返回读取的元素数(至少一个)。
错误
ZX_ERR_BAD_HANDLE
句柄不是有效的句柄。
ZX_ERR_WRONG_TYPE
句柄不是 fifo 句柄。
ZX_ERR_INVALID_ARGS
data 是无效的指针,actual_count 是无效的指针。
ZX_ERR_OUT_OF_RANGE
count 为零或 elem_size 不等于 fifo 的元素大小。
ZX_ERR_ACCESS_DENIED
句柄没有 ZX_RIGHT_READ
。
ZX_ERR_PEER_CLOSED
fifo 的另一端是关闭的。
ZX_ERR_SHOULD_WAIT
fifo 为空。