zx_stream_writev

摘要

在目前的搜尋偏移量將資料寫入串流。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_stream_writev(zx_handle_t handle,
                             uint32_t options,
                             const zx_iovec_t* vectors,
                             size_t num_vectors,
                             size_t* actual);

說明

zx_stream_writev() 會嘗試從 vectorsnum_vectors 指定的緩衝區,將位元組寫入串流 (從目前的搜尋偏移開始)。如果成功,實際寫入的位元組數會透過 actual 傳回。

如果 options 包含 ZX_STREAM_APPEND,或串流處於附加模式,系統會將串流的搜尋偏移量自動設為寫入資料前串流的內容大小。

如果寫入作業會寫入超過串流結尾的內容,函式會嘗試增加串流的內容大小,以便接收指定資料,並以零位元組填入任何新的未寫入內容。

串流的內容大小受限於基礎 VMO 的大小。 如果 VMO 的大小不足以接收所有指定資料,系統會將作業視為部分寫入。如果沒有寫入任何位元組,作業會視情況傳回 ZX_ERR_FILE_BIGZX_ERR_OUT_OF_RANGEZX_ERR_NO_SPACE。否則,在部分寫入期間,系統會傳回 ZX_OK,且實際容量會小於緩衝區容量的總和。

如果傳入 NULL actual,系統會忽略該值。

依據實際寫入的位元組數,推進串流的搜尋偏移量。 如果寫入失敗,搜尋偏移量可能會維持不變,也可能已變更為未指定的值。

如果 vectors 的內容在此作業期間發生變化、任何緩衝區重疊,或任何緩衝區與 vectors 重疊,則行為不明。

權限

handle 必須是 ZX_OBJ_TYPE_STREAM 類型,且具有 ZX_RIGHT_WRITE

傳回值

zx_stream_writev() 會在成功時傳回 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 無法容納的位置。

另請參閱