摘要
將資料移至 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_vmo 到 dst_vmo 的 memmove
後面接著 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。我們無法保證確切的資料量
已移動。但可以保證在
符合下列條件:
- 沒有會導致下列錯誤的情況 裝置。
- 其他執行緒不會修改 src_vmo 和 dst_vmo 在此作業執行期間。
「修改」則是指在
提供 VMO 相關資訊或參考 VMO (例如配量、參照)
子項等等)。修改任何類型的父項、子項或同層
快照應該不會導致任何錯誤,不過視
所以您可能會覺得寫出的摘要若發生以下情況,便可能出現撕裂的情形
操控 SNAPSHOT_AT_LEAST_ON_WRITE
VMO 的父項
實際轉帳並沒有承諾的原子性請注意
從我們可能需要執行的 SNAPSHOT
個子項傳送網頁
也就是分配新網頁 (如果該網頁尚未更新)
錯誤
ZX_ERR_BAD_HANDLE
dst_vmo 或 src_vmo 不是有效的 VMO 控制代碼。
ZX_ERR_INVALID_ARGS
offset、length 或 src_offset 是非頁面
對齊,或 options 為非零。
ZX_ERR_ACCESS_DENIED
src_vmo 不含 ZX_RIGHT_WRITE
或
ZX_RIGHT_READ
,或 dst_vmo 沒有 ZX_RIGHT_WRITE
。
ZX_ERR_BAD_STATE
指定範圍內的網頁,範圍:src_vmo
或
dst_vmo
已固定。
ZX_ERR_NOT_SUPPORTED
src_vmo 或 dst_vmo 可以是實體、
持續或呼叫循環。
ZX_ERR_OUT_OF_RANGE
dst_vmo 或 src_vmo 中的指定範圍是
無效。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。