.\"
.TH READV 2 2015\-01\-22 Linux "Linux Programmer's Manual"
.SH 名前
-readv, writev, preadv, pwritev \- 複数のバッファへの読み書きを行なう
+readv, writev, preadv, pwritev \- è¤\87æ\95°ã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81¸ã\81®èªã\81¿æ\9b¸ã\81\8dã\82\92è¡\8cã\81ªã\81\86
.SH 書式
.nf
\fB#include <sys/uio.h>\fP
.sp
\fBpreadv\fP(), \fBpwritev\fP(): _BSD_SOURCE
.SH 説明
-\fBreadv\fP() システムコールは、ファイルディスクリプタ \fIfd\fP に関連付けられた
-ファイルから、 \fIiovcnt\fP 個のバッファ分のデータを読み込み、 \fIiov\fP で指定
-されたバッファに格納する ("scatter input";「ばらまき入力」)。
+\fBreadv\fP() システムコールは、ファイルディスクリプター \fIfd\fP に関連付けられた
+ファイルから、 \fIiovcnt\fP 個のバッファー分のデータを読み込み、 \fIiov\fP で指定
+ã\81\95ã\82\8cã\81\9fã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81«æ ¼ç´\8dã\81\99ã\82\8b ("scatter input";ã\80\8cã\81°ã\82\89ã\81¾ã\81\8då\85¥å\8a\9bã\80\8d)ã\80\82
.PP
-\fBwritev\fP() システムコールは、 \fIiov\fP で指定されたバッファから最大 \fIiovcnt\fP
-個のバッファ分のデータを取り出し、 ファイルディスクリプタ \fIfd\fP に関連付けら
+\fBwritev\fP() ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81¯ã\80\81 \fIiov\fP ã\81§æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81\8bã\82\89æ\9c\80大 \fIiovcnt\fP
+個のバッファー分のデータを取り出し、 ファイルディスクリプター \fIfd\fP に関連付けら
れたファイルに書き込む ("gather output";「かき集め出力」)。
.PP
-ポインタ \fIiov\fP は \fIiovec\fP 構造体の配列へのポインタである。 \fIiovec\fP 構造体は \fI<sys/uio.h>\fP
-で以下のように定義されている:
+ポインター \fIiov\fP は \fIiovec\fP 構造体の配列へのポインターである。 \fIiovec\fP 構造体は
+\fI<sys/uio.h>\fP で以下のように定義されている:
.PP
.br
.in +4n
.fi
.in
.PP
-\fBreadv\fP() システムコールは、複数のバッファにデータを読み込む点を除いて
+\fBreadv\fP() ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81¯ã\80\81è¤\87æ\95°ã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81«ã\83\87ã\83¼ã\82¿ã\82\92èªã\81¿è¾¼ã\82\80ç\82¹ã\82\92é\99¤ã\81\84ã\81¦
\fBread\fP(2) と全く同様の動作を行う。
.PP
-\fBwritev\fP() システムコールは、複数のバッファのデータを書き出す点以外は
+\fBwritev\fP() ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81¯ã\80\81è¤\87æ\95°ã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81®ã\83\87ã\83¼ã\82¿ã\82\92æ\9b¸ã\81\8då\87ºã\81\99ç\82¹ä»¥å¤\96ã\81¯
\fBwrite\fP(2) と全く同様の動作を行う。
.PP
-バッファは配列の順序で処理される。これは、 \fBreadv\fP() が \fIiov\fP[0] が完全に一杯になるまでデータを詰めてから、
-\fIiov\fP[1] などに進むことを意味する (データが十分ない場合は、 \fIiov\fP が指すバッファのいずれも一杯にならない)。 同様に、
+ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81¯é\85\8då\88\97ã\81®é \86åº\8fã\81§å\87¦ç\90\86ã\81\95ã\82\8cã\82\8bã\80\82ã\81\93ã\82\8cã\81¯ã\80\81 \fBreadv\fP() ã\81\8c \fIiov\fP[0] ã\81\8cå®\8cå\85¨ã\81«ä¸\80æ\9d¯ã\81«ã\81ªã\82\8bã\81¾ã\81§ã\83\87ã\83¼ã\82¿ã\82\92è©°ã\82\81ã\81¦ã\81\8bã\82\89ã\80\81
+\fIiov\fP[1] ã\81ªã\81©ã\81«é\80²ã\82\80ã\81\93ã\81¨ã\82\92æ\84\8få\91³ã\81\99ã\82\8b (ã\83\87ã\83¼ã\82¿ã\81\8cå\8d\81å\88\86ã\81ªã\81\84å ´å\90\88ã\81¯ã\80\81 \fIiov\fP ã\81\8cæ\8c\87ã\81\99ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81®ã\81\84ã\81\9aã\82\8cã\82\82ä¸\80æ\9d¯ã\81«ã\81ªã\82\89ã\81ªã\81\84)ã\80\82 å\90\8cæ§\98ã\81«ã\80\81
\fBwritev\fP() は \fIiov\fP[0] の内容を全部書き出してから \fIiov\fP[1] などに進む。
.PP
\fBreadv\fP() と \fBwritev\fP() によるデータ転送は atomic に行われる。つまり、 \fBwritev\fP()
によるデータ書き込みは一つのブロックとして行われ、他のプロセスの write による書き込みと混ざり合うことはない (例外に関しては
\fBpipe\fP(7) を参照のこと)。同様に、 \fBreadv\fP() はファイルから連続するデータブロックが読み出すことが保証され、
-同じファイル記述 (file description; \fBopen\fP(2) 参照) を参照するファイルディスクリプタを持つ他のスレッドやプロセスが
+å\90\8cã\81\98ã\83\95ã\82¡ã\82¤ã\83«è¨\98è¿° (file description; \fBopen\fP(2) å\8f\82ç\85§) ã\82\92å\8f\82ç\85§ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\82\92æ\8c\81ã\81¤ä»\96ã\81®ã\82¹ã\83¬ã\83\83ã\83\89ã\82\84ã\83\97ã\83ã\82»ã\82¹ã\81\8c
実行した read 操作の影響を受けることはない。
.SS "preadv() と pwritev()"
\fBpreadv\fP() システムコールは \fBreadv\fP() と \fBpreadv\fP(2) の機能を
以降では、 (Linux カーネルのバージョン 2.6.32 以降が必須条件となり) glibc
のラッパー関数は常にシステムコールを直接呼び出すようになっている。
.SH バグ
-ファイルディスクリプタに対する操作を行う \fBreadv\fP() や \fBwritev\fP() と、
+ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81«å¯¾ã\81\99ã\82\8bæ\93\8dä½\9cã\82\92è¡\8cã\81\86 \fBreadv\fP() ã\82\84 \fBwritev\fP() ã\81¨ã\80\81
標準入出力ライブラリの関数をごちゃまぜにして呼ぶのはお薦めしない。
どんな結果になるかは定義されておらず、おそらく期待する結果は
得られないだろう。