摘要
从 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() 尝试从 虚拟内存
对象 (VMO) 中的 offset 处读取正好 buffer_size 个字节。
buffer:指向用户缓冲区的指针,用于读取字节。
buffer_size:尝试读取的字节数。buffer 缓冲区应足够大,至少能容纳这么多字节。
权限
handle 的类型必须为 ZX_OBJ_TYPE_VMO,并且具有 ZX_RIGHT_READ。
返回值
zx_vmo_read() 成功时返回 ZX_OK,并且正好 buffer_size 个字节已写入 buffer。如果失败,则返回负错误值,并且写入 buffer 的字节数未定义。
错误
ZX_ERR_BAD_HANDLE handle 不是有效的句柄。
ZX_ERR_WRONG_TYPE handle 不是 VMO 句柄。
ZX_ERR_ACCESS_DENIED handle 没有 ZX_RIGHT_READ 权限,或者 [buffer, buffer + buffer_size) 不可写。
ZX_ERR_NOT_FOUND:buffer 地址未映射到地址空间中的地址。
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 由分页器提供支持,并且分页器读取的内容已损坏。