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 或数据流处于附加模式,则在写入数据之前,数据流的还原偏移量以原子方式设置为数据流的内容大小。

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

如果在将一定量的数据写入流后调整大小操作失败,该函数将成功返回。如果没有写入到数据流的字节,则操作将视情况返回 ZX_ERR_FILE_BIGZX_ERR_NO_SPACE

如果传入 NULL actual,它将被忽略。

使流的寻址偏移量增加实际写入的字节数。 如果写入失败,跳转偏移量可能会保持不变或更改为未指定的值。

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

权限

handle 必须为 ZX_OBJ_TYPE_STREAM 类型,且具有 ZX_RIGHT_WRITE

返回值

zx_stream_writev() 会在成功时返回 ZX_OK,并将写入的确切字节数写入实际(如果为非 NULL)。

错误

ZX_ERR_BAD_HANDLE 句柄不是有效的句柄。

ZX_ERR_WRONG_TYPE 句柄不是流句柄。

ZX_ERR_ACCESS_DENIED 标识名没有 ZX_RIGHT_WRITE 权限。

ZX_ERR_INVALID_ARGS vectors 是无效的 zx_iovec_t,或者 options 有不受支持的位设为 1。

ZX_ERR_NOT_FOUND 表示 vectors 地址或 vectors 中指定的地址不会映射到地址空间中的地址。

ZX_ERR_BAD_STATE,因此无法写入底层数据源。

ZX_ERR_FILE_BIG表示数据流已超出预定义的大小上限。

ZX_ERR_NO_SPACE 表示底层存储媒介没有足够的空间。

另请参阅