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。如果失敗,會傳回負值錯誤值,且寫入 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 緩衝區 是無效的指標或 NULL。

ZX_ERR_NOT_FOUND buffer 位址未對應到位址空間中的位址。

ZX_ERR_OUT_OF_RANGE offset + buffer_size 大於 VMO 的大小。

ZX_ERR_BAD_STATE VMO 已標示為未快取且無法直接讀取,或者 VMO 由 Pager 和 Pager 或 VMO 處於不良狀態,導致系統無法填入要求的網頁。

ZX_ERR_IO VMO 由呼叫器支援,且呼叫器在讀取要求的網頁時遇到 I/O 錯誤。

ZX_ERR_IO_DATA_INTEGRITY VMO 由分頁器支援,且分頁器讀取的內容會損毀。

另請參閱