摘要
通过 VMO 创建数据流。
声明
#include <zircon/syscalls.h>
zx_status_t zx_stream_create(uint32_t options,
zx_handle_t vmo,
zx_off_t seek,
zx_handle_t* out_stream);
说明
zx_stream_create()
会创建一个数据流,用于在底层 VMO 中读取和写入数据。
流的跳转偏移量初始化为 seek。
选项
ZX_STREAM_MODE_READ
数据流将用于读取。如果指定的 vmo 缺少 ZX_RIGHT_READ
,此函数将返回 ZX_ERR_ACCESS_DENIED
。否则,ZX_RIGHT_READ
将作为权限包含在创建的流对象上。
ZX_STREAM_MODE_WRITE
:该数据流将用于写入。如果指定的 vmo 缺少 ZX_RIGHT_WRITE
,此函数将返回 ZX_ERR_ACCESS_DENIED
。否则,ZX_RIGHT_WRITE
将作为权限包含在创建的流对象上。
ZX_STREAM_MODE_APPEND
:以附加模式创建数据流。在附加模式下,数据流会先以原子方式将数据流的跳转偏移量设置为数据流的内容大小,然后再在 zx_stream_writev()
中写入数据。
权限
TODO(https://fxbug.dev/42107318)
返回值
zx_stream_create()
会在成功时返回 ZX_OK
。如果失败,则返回以下值之一。
错误
ZX_ERR_BAD_HANDLE
vmo 不是有效的标识名。
ZX_ERR_WRONG_TYPE
vmo 不是 VMO 句柄。
ZX_ERR_ACCESS_DENIED
vmo 不具备指定选项所需的权限。
ZX_ERR_INVALID_ARGS
out_stream 是无效的指针或 NULL,options 的不受支持位设置为 1。
ZX_ERR_NO_MEMORY
因内存不足而失败。