摘要
将数据写入指定偏移处的流。
声明
#include <zircon/syscalls.h>
zx_status_t zx_stream_writev_at(zx_handle_t handle,
uint32_t options,
zx_off_t offset,
const zx_iovec_t* vectors,
size_t num_vectors,
size_t* actual);
说明
尝试从 vectors 和 num_vectors 指定的缓冲区中,从给定的 offset 开始,向流写入 zx_stream_writev_at() 个字节。如果成功,实际写入的字节数将通过 actual 返回。
如果写入操作会写入到超出流末尾的位置,该函数将尝试增加流的内容大小,以便接收给定的数据,并用零字节填充任何新的未写入内容。
流的内容大小受底层 VMO 大小的限制。
如果 VMO 的大小不足以接收整个给定数据,则该操作会被视为部分写入。如果没有写入任何字节,该操作将根据具体情况返回 ZX_ERR_FILE_BIG、ZX_ERR_OUT_OF_RANGE 或 ZX_ERR_NO_SPACE。否则,在部分写入期间,将返回 ZX_OK,并且实际将小于缓冲区容量的总和。
如果传入了 NULL 实际值,系统会忽略该值。
不会推进视频流的搜索偏移量。
如果 vectors 的内容在此操作期间发生变化,或者任何缓冲区发生重叠,或者任何缓冲区与 vectors 发生重叠,则行为未指定。
options 预留以供日后使用,必须为 0。
权限
句柄必须是 ZX_OBJ_TYPE_STREAM 类型,并且具有 ZX_RIGHT_WRITE。
返回值
zx_stream_writev_at() 在成功时返回 ZX_OK,并将写入的字节数写入 actual(如果非 NULL)。
错误
ZX_ERR_BAD_HANDLE 句柄不是有效的句柄。
ZX_ERR_WRONG_TYPE handle 不是流句柄。
ZX_ERR_ACCESS_DENIED handle 不具有 ZX_RIGHT_WRITE 权限。
ZX_ERR_INVALID_ARGS vectors 是无效的 zx_iovec_t,或者 options 具有设置为 1 的不受支持的位。
ZX_ERR_NOT_FOUND 向量地址或向量中指定的地址未映射到地址空间中的地址。
ZX_ERR_BAD_STATE 无法写入底层数据源。
ZX_ERR_FILE_BIG 该流已超出预定义的最大大小限制。
ZX_ERR_NO_SPACE 底层存储介质没有足够的空间。
ZX_ERR_OUT_OF_RANGE 尝试写入底层 VMO 无法容纳的位置。