Zx_vmo_read

总结

从 VMO 读取字节。

声明

#include <zircon/syscalls.h>

zx_status_t zx_vmo_read(zx_handle_t handle,
                        void* buffer,
                        uint64_t offset,
                        size_t buffer_size);

说明

zx_vmo_read() 会尝试从位于 offset虚拟内存对象 (VMO) 中正好读取 buffer_size 字节。

buffer 指针,指向要向其读取字节的用户缓冲区。

buffer_size:要尝试读取的字节数。buffer 缓冲区应足够大,至少能容纳这么多字节。

权限

handle 必须为 ZX_OBJ_TYPE_VMO 类型,且具有 ZX_RIGHT_READ

返回值

zx_vmo_read() 会在成功时返回 ZX_OK,并且确切的 buffer_size 字节已写入缓冲区。如果失败,则返回负的错误值,并且未定义写入 buffer 的字节数。

错误

ZX_ERR_BAD_HANDLE 句柄不是有效的句柄。

ZX_ERR_WRONG_TYPE 句柄不是 VMO 句柄。

ZX_ERR_ACCESS_DENIED 句柄没有 ZX_RIGHT_READ 权限,或 [buffer, buffer + buffer_size) 不可写入。

ZX_ERR_INVALID_ARGS buffer 是无效的指针或 NULL。

ZX_ERR_NOT_FOUND 缓冲区地址未映射到地址空间中的地址。

ZX_ERR_OUT_OF_RANGE offset + buffer_size 大于 VMO 的大小。

ZX_ERR_BAD_STATE VMO 已标记为未缓存且无法直接读取,或者 VMO 由分页器支持,而分页器或 VMO 处于错误状态,导致所请求的页面无法填充。

ZX_ERR_IO VMO 由分页器提供支持,并且分页器在读取所请求的页面时遇到了 I/O 错误。

ZX_ERR_IO_DATA_INTEGRITY VMO 由分页器提供支持,而分页器读取的内容已损坏。

另请参阅