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() 會從目前的搜尋偏移值開始,從向量num_vectors指定的緩衝區開始,嘗試將位元組寫入串流。如果成功,實際寫入的位元組數會透過實際傳回。

如果 options 包含 ZX_STREAM_APPEND,或串流處於附加模式,則在寫入資料之前,串流的尋找偏移量會以不可分割的形式設為串流的內容大小。

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

在將一定數量的資料寫入串流後,如果調整大小作業失敗,函式就會成功傳回。如果未將任何位元組寫入串流,則作業會視情況傳回 ZX_ERR_FILE_BIGZX_ERR_NO_SPACE

如果傳入 NULL「實際」,系統會忽略此值。

將串流的跳轉偏移乘以實際寫入的位元組數。如果寫入失敗,搜尋偏移量可以維持不變,或更改為未指定的值。

如果在此作業期間,「向量」的內容有重疊、任何緩衝區重疊,或是有任何緩衝區與「向量」重疊,系統就會未指定行為。

權限

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

傳回值

zx_stream_writev() 會在成功時傳回 ZX_OK,如為非空值,則寫入至實際 (如果非 NULL) 的確切寫入位元組數。

錯誤

ZX_ERR_BAD_HANDLE 帳號代碼不是有效的帳號代碼。

ZX_ERR_WRONG_TYPE 帳號代碼不是串流帳號代碼。

ZX_ERR_ACCESS_DENIED 處理常式沒有 ZX_RIGHT_WRITE 權利。

ZX_ERR_INVALID_ARGS 向量是無效的 zx_iovec_t,或選項有不支援的位元設為 1。

ZX_ERR_NOT_FOUND「向量」地址或是「向量」中指定的地址,與地址空間中的地址不符。

無法寫入基礎資料來源 ZX_ERR_BAD_STATE

ZX_ERR_FILE_BIG:串流已超過預先定義的大小上限。

ZX_ERR_NO_SPACE 基礎儲存媒介沒有足夠的空間。

另請參閱