摘要
在指定偏移量將資料寫入串流。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_stream_writev_at(zx_handle_t handle,
                                uint32_t options,
                                zx_off_t offset,
                                const zx_iovec_t* vectors,
                                size_t num_vectors,
                                size_t* actual);
說明
zx_stream_writev_at() 會嘗試從指定 offset 開始,將位元組寫入串流,這些位元組來自 vectors 和 num_vectors 指定的緩衝區。如果成功,實際寫入的位元組數會透過 actual 傳回。
如果寫入作業會寫入超過串流結尾的內容,函式會嘗試增加串流的內容大小,以便接收指定資料,並以零位元組填入任何新的未寫入內容。
串流的內容大小受限於基礎 VMO 的大小。
如果 VMO 的大小不足以接收所有指定資料,系統會將作業視為部分寫入。如果沒有寫入任何位元組,作業會視情況傳回 ZX_ERR_FILE_BIG、ZX_ERR_OUT_OF_RANGE 或 ZX_ERR_NO_SPACE。否則,在部分寫入期間,系統會傳回 ZX_OK,且實際容量會小於緩衝區容量的總和。
如果傳入 NULL actual,系統會忽略該值。
不會推進串流的搜尋偏移。
如果 vectors 的內容在此作業期間發生變化、任何緩衝區重疊,或任何緩衝區與 vectors 重疊,則行為不明。
options 保留供日後使用,且必須為 0。
權限
handle 必須是 ZX_OBJ_TYPE_STREAM 類型,且具有 ZX_RIGHT_WRITE。
傳回值
zx_stream_writev_at() 會在成功時傳回 ZX_OK,並將寫入的確切位元組數寫入 actual (如果不是 NULL)。
錯誤
ZX_ERR_BAD_HANDLE  handle 不是有效控制代碼。
ZX_ERR_WRONG_TYPE  handle 不是串流控制代碼。
ZX_ERR_ACCESS_DENIED  handle 沒有 ZX_RIGHT_WRITE 權限。
ZX_ERR_INVALID_ARGS vectors 是無效的 zx_iovec_t,或 options 含有設為 1 的不支援位元。
ZX_ERR_NOT_FOUND  「vectors」地址,或「vectors」中指定的地址未對應至位址空間中的地址。
ZX_ERR_BAD_STATE  無法寫入基礎資料來源。
ZX_ERR_FILE_BIG  串流已超過預先定義的大小上限。
ZX_ERR_NO_SPACE  基礎儲存媒體空間不足。
ZX_ERR_OUT_OF_RANGE  嘗試寫入基礎 VMO 無法容納的位置。