READV(3)

名前
readv, writev - 複数のバッファーを用いたファイル入出力

書式
#include <sys/uio.h>

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

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

説明
readv() 関数はファイル・ディスクリプターfiledesに連結されたファイルから countブロックを、vectorで指定された複数のバッファーに読 み込む。

writev()関数はファイル・ディスクリプターfiledes に連結されたファイルにvectorポインタで指定された最大 countブロックまでをバッファーから書き込む。

vector ポインタは

struct iovect
{
void *iovbase;	/* Starting address  */
size_t iov_len;    /* Number of bytes */
} ;

のように<sys/uio.h>の中で定義される構造体iovecを指す。

バッファは vector[0], vector[1], ... vector[count-1]. の順で処理される。

readv()関数は複数のバッファーに読み込むということを除けば、 read(2)とまったく同じように動作する。

writev()関数は複数のバッファーから書き込むということを除けば、 write(2)とまったく同じように動作する。

返り値
readv()関数は書き込まれたバイト数を返す。 エラーの場合は -1 を返す。 writev()関数は読み込まれたバイト数を返す。 エラーの場合は -1 を返す。

エラー
readv()とwritev()関数は失敗した場合errnoを以下の値に 設定する。

EBADDF
    fdが有効なファイル・ディスクリプターではない

EINVAL
    fdが（R readv()の場合）読み込めないか、 （R writev()の場合）書き込めない。

EFAULT
    bufがアクセス可能なアドレス空間の外にある。

EAGAIN
    open()関数を呼び出す時に非停止(Non-blocking) I/O が選択されており、 すぐにデータが読み込み可能ではなかった。

EINTR
    データが引き渡される前に、読みこみあるいは書き込みへの 割り込みがおこった。

準拠
不明

バグ
R readv() "あるいは" writev()のようなファイル・ディスクリプターを 操作する関数を、stdioライブラリーから呼び出される関数と組み合わせて呼 び出すことは推奨できない。その結果は定義されないものであり，おそらく 期待した結果は得られない。

関連項目
read(2), write(2)