READV(2)

名前
readv, writev - ベクター(vector)の読み書きを行なう

書式
#include <sys/uio.h>

int readv(int fd, const struct iovec * vector, size_t count);

int writev(int fd, const struct iovec * vector, size_t count);

struct iovec {
  __ptr_t iov_base; /* Starting address. */
  size_t iov_len; /* Length in bytes. */
};

説明
readv はファイル・ディスクリプター(file descriptor) fd から データを読み込み結果を vector に記述されたバッファーに格納する。 バッファーの数は count で指定する。バッファーへは指定された順番で 格納される。データが連続するバッファーでなくベクター(vector)へ格納する 点を除いて read と同じように働く。 writev はファイル・ディスクリプター fd へ vector に記述されたバッファーからのデータを書き込む。バッファーの 数は count で指定する。バッファーは指定された順番で使用される。 データを連続するバッファーからでなくベクター(vector)から取得する点を 除いて write と同じように働く。

返り値
成功した場合 readv は読み込んだバイト数を返す。 成功した場合 writev は書き込んだバイト数を返す。 エラーの場合は -1 が返され、errno が適切に設定される。

エラー

EINVAL
    不正な引き数が与えられた。例えば count が MAX_IOVEC より 大きいかゼロである、fd が読み込みの可能な(readv の場合)、 書き込み可能な(writev の場合)オブジェクトを参照していないなど。

EFAULT
    「セグメンテーション違反(segmentation fault)。」 たいていは vector や iov_base のどれかが正しく 割り当てられたメモリを指していない。

EBADF
    ファイル・ディスクリプター fd が正しくない。

EINTR
    データを読み書きする前にシグナルによって割り込まれた。

EAGAIN
    O_NONBLOCK を使用して非停止(non-blocking) I/O が選択されており、 すぐに読み込めるデータが存在しなかった。(またはファイル・ディスクリプター fd が参照しているオブジェクトがロックされている。)

EISDIR
    fd がディレクトリを参照している。

EOPNOTSUP
    fd が読み込み/書き込みをサポートしていないソケットやデバイスを 参照している。

fd が接続しているオブジェクトによっては他のエラーが起こるかもしれない。

準拠
4.4BSD ( readv と writev 関数は BSD 4.2 で最初に現われた)

関連項目
read(2), write(2), fprintf(3), fscanf(3).