zx_stream_writev

摘要

在当前搜索偏移量处将数据写入流。

声明

#include <zircon/syscalls.h>

zx_status_t zx_stream_writev(zx_handle_t handle,
                             uint32_t options,
                             const zx_iovec_t* vectors,
                             size_t num_vectors,
                             size_t* actual);

说明

zx_stream_writev() 尝试从 vectorsnum_vectors 指定的缓冲区中,从当前查找偏移量开始,向数据流写入字节。 如果成功,实际写入的字节数将通过 actual 返回。

如果 options 包含 ZX_STREAM_APPEND 或流处于附加模式,则流的查找偏移量会原子性地设置为流在写入数据之前的内容大小。

如果写入操作会写入到超出流末尾的位置,该函数将尝试增加流的内容大小,以便接收给定的数据,并用零字节填充任何新的未写入内容。

流的内容大小受底层 VMO 大小的限制。 如果 VMO 的大小不足以接收整个给定数据,则该操作会被视为部分写入。如果没有写入任何字节,该操作将根据具体情况返回 ZX_ERR_FILE_BIGZX_ERR_OUT_OF_RANGEZX_ERR_NO_SPACE。否则,在部分写入期间,将返回 ZX_OK,并且实际将小于缓冲区容量的总和。

如果传入了 NULL 实际值,系统会忽略该值。

将流的搜索偏移量前进实际写入的字节数。 如果写入失败,则搜索偏移量可能会保持不变,也可能已更改为未指定的值。

如果 vectors 的内容在此操作期间发生变化,或者任何缓冲区发生重叠,或者任何缓冲区与 vectors 发生重叠,则行为未指定。

权限

句柄必须是 ZX_OBJ_TYPE_STREAM 类型,并且具有 ZX_RIGHT_WRITE

返回值

zx_stream_writev() 在成功时返回 ZX_OK,并将写入的字节数写入 actual(如果非 NULL)。

错误

ZX_ERR_BAD_HANDLE 句柄不是有效的句柄。

ZX_ERR_WRONG_TYPE handle 不是流句柄。

ZX_ERR_ACCESS_DENIED 句柄没有 ZX_RIGHT_WRITE 权限。

ZX_ERR_INVALID_ARGS vectors 无效或 options 的不支持的位设置为 1。zx_iovec_t

ZX_ERR_NOT_FOUND 向量地址或向量中指定的地址未映射到地址空间中的地址。

ZX_ERR_BAD_STATE 无法写入底层数据源。

ZX_ERR_FILE_BIG 该流已超出预定义的最大大小限制。

ZX_ERR_NO_SPACE 底层存储介质没有足够的空间。

ZX_ERR_OUT_OF_RANGE 尝试写入底层 VMO 无法容纳的位置。

另请参阅