zx_vmo_transfer_data

摘要

將資料移至 VMO。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_vmo_transfer_data(zx_vmo_t dst_vmo,
                                 uint32_t options,
                                 uint64_t offset,
                                 uint64_t length,
                                 zx_vmo_t src_vmo,
                                 uint64_t src_offset);

說明

[*src_offset*, *src_offset* + *length*)的網頁從 dst_vmo 中的 src_vmo[*offset*, *offset* + *length*)。是 函式相當於從 src_vmodst_vmomemmove 後面接著 src_vmo 中相關頁面的分解。不過 達成目標的機制並不相同備份頁面 實際上是在 VMO 之間移動,而不是複製資料這樣一來 因此效能大幅提升儘管是不同的機制 呈現與 memmove 相同的語意,因此可以提供重疊 系統支援來源和目的地區域。

options 欄位目前必須設為 0。

權限

dst_vmo 必須是 ZX_OBJ_TYPE_VMO 類型。這個帳號代碼必須包含 ZX_RIGHT_WRITE

src_vmo 必須是 ZX_OBJ_TYPE_VMO 類型。這個帳號代碼必須包含 《ZX_RIGHT_READ》和《ZX_RIGHT_WRITE》。

傳回值

zx_vmo_transfer_data() 會在成功時傳回 ZX_OK。如果發生以下情況: 失敗時,會傳回負的錯誤值 (如下所述)。如果 傳輸失敗,src_vmo 中沒有任何網頁 已移至 dst_vmo。我們無法保證確切的資料量 已移動。但可以保證在 符合下列條件:

  1. 沒有會導致下列錯誤的情況 裝置。
  2. 其他執行緒不會修改 src_vmodst_vmo 在此作業執行期間。

「修改」則是指在 提供 VMO 相關資訊或參考 VMO (例如配量、參照) 子項等等)。修改任何類型的父項、子項或同層 快照應該不會導致任何錯誤,不過視 所以您可能會覺得寫出的摘要若發生以下情況,便可能出現撕裂的情形 操控 SNAPSHOT_AT_LEAST_ON_WRITE VMO 的父項 實際轉帳並沒有承諾的原子性請注意 從我們可能需要執行的 SNAPSHOT 個子項傳送網頁 也就是分配新網頁 (如果該網頁尚未更新)

錯誤

ZX_ERR_BAD_HANDLE dst_vmosrc_vmo 不是有效的 VMO 控制代碼。

ZX_ERR_INVALID_ARGS offsetlengthsrc_offset 是非頁面 對齊,或 options 為非零。

ZX_ERR_ACCESS_DENIED src_vmo 不含 ZX_RIGHT_WRITEZX_RIGHT_READ,或 dst_vmo 沒有 ZX_RIGHT_WRITE

ZX_ERR_BAD_STATE 指定範圍內的網頁,範圍:src_vmodst_vmo已固定。

ZX_ERR_NOT_SUPPORTED src_vmodst_vmo 可以是實體、 持續或呼叫循環。

ZX_ERR_OUT_OF_RANGE dst_vmosrc_vmo 中的指定範圍是 無效。

ZX_ERR_NO_MEMORY 因記憶體不足而失敗。

另請參閱