zx_fifo_read
名称
fifo_read —— 从fifo中读取数据
概要
#include <zircon/syscalls.h>
zx_status_t zx_fifo_read(zx_handle_t handle, size_t elem_size,
void* buffer, size_t count, size_t* actual_count);
描述
fifo_read() 尝试从handle指向的fifo中读取count个元素到buffer。
如果fifo中没有足够的元素来满足整个请求,则读取比请求的元素少的数量,实际读取的元素数量通过actual_count返回。
elem_size指定的元素大小必须与传递给 fifo_create() 的元素大小一致。
buffer的大小必须至少为count elem_size*个字节。
actual_count允许为NULL,这对于读取单个元素时很有用:如果count为1且 fifo_read() 返回 ZX_OK,那么actual_count保证为1,因此可以安全地被忽略。
读取零个元素是非法的。
权限
handle必须具有ZX_RIGHT_READ权限。
返回值
fifo_read() 调用成功则返回 ZX_OK,并通过actual_count返回读取的元素数量(至少为1)。
错误码
ZX_ERR_BAD_HANDLE: handle是无效句柄。
ZX_ERR_WRONG_TYPE: handle不是fifo类型句柄。
ZX_ERR_INVALID_ARGS: buffer是无效指针或actual_count是无效指针。
ZX_ERR_OUT_OF_RANGE: count为零或elem_size不等于fifo的元素大小。
ZX_ERR_ACCESS_DENIED: handle没有ZX_RIGHT_READ权限。
ZX_ERR_PEER_CLOSED: fifo的另一侧已关闭。
ZX_ERR_SHOULD_WAIT: fifo已满。