.\" Updated 2005-10-07, Akihiro MOTOKI
.\" Updated 2007-06-01, Akihiro MOTOKI, LDP v2.50
.\"
-.\"WORD: vector ¥Ù¥¯¥¿ (vector)
-.\"WORD: file descriptor ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
-.\"WORD: buffer ¥Ð¥Ã¥Õ¥¡
+.\"WORD: vector ã\83\99ã\82¯ã\82¿ (vector)
+.\"WORD: file descriptor ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿
+.\"WORD: buffer ã\83\90ã\83\83ã\83\95ã\82¡
.\"
.TH READV 2 2002-10-17 "Linux" "Linux Programmer's Manual"
.\"O .SH NAME
.\"O readv, writev \- read or write data into multiple buffers
-.SH ̾Á°
-readv, writev \- Ê£¿ô¤Î¥Ð¥Ã¥Õ¥¡¤Ø¤ÎÆɤ߽ñ¤¤ò¹Ô¤Ê¤¦
+.SH 名前
+readv, writev \- 複数のバッファへの読み書きを行なう
.\"O .SH SYNOPSIS
-.SH ½ñ¼°
+.SH 書式
.nf
.B #include <sys/uio.h>
.sp
.BI "ssize_t writev(int " fd ", const struct iovec *" iov ", int " iovcnt );
.fi
.\"O .SH DESCRIPTION
-.SH ÀâÌÀ
+.SH 説明
.\"O The
.\"O .BR readv ()
.\"O function reads
.\"O .I iov
.\"O ("scatter input").
.BR readv ()
-´Ø¿ô¤Ï¡¢¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
+é\96¢æ\95°ã\81¯ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿
.I fd
-¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥Õ¥¡¥¤¥ë¤«¤é¡¢
+に関連付けられたファイルから、
.I iovcnt
-¸Ä¤Î¥Ð¥Ã¥Õ¥¡Ê¬¤Î¥Ç¡¼¥¿¤òÆɤ߹þ¤ß¡¢
+個のバッファ分のデータを読み込み、
.I iov
-¤Ç»ØÄꤵ¤ì¤¿¥Ð¥Ã¥Õ¥¡¤Ë³ÊǼ¤¹¤ë
-("scatter input";¡Ö¤Ð¤é¤Þ¤ÆþÎÏ¡×)¡£
+で指定されたバッファに格納する
+("scatter input";「ばらまき入力」)。
.PP
.\"O The
.\"O .BR writev ()
.\"O .I fd
.\"O ("gather output").
.BR writev ()
-´Ø¿ô¤Ï¡¢
+関数は、
.I iov
-¤Ç»ØÄꤵ¤ì¤¿¥Ð¥Ã¥Õ¥¡¤«¤éºÇÂç
+で指定されたバッファから最大
.I iovcnt
-¸Ä¤Î¥Ð¥Ã¥Õ¥¡Ê¬¤Î¥Ç¡¼¥¿¤ò¼è¤ê½Ð¤·¡¢
-¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
+個のバッファ分のデータを取り出し、
+ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿
.I fd
-¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë½ñ¤¹þ¤à
-("gather output";¡Ö¤«¤½¸¤á½ÐÎÏ¡×)¡£
+に関連付けられたファイルに書き込む
+("gather output";「かき集め出力」)。
.PP
.\"O The pointer
.\"O .I iov
.\"O defined in
.\"O .I <sys/uio.h>
.\"O as:
-¥Ý¥¤¥ó¥¿
+ã\83\9dã\82¤ã\83³ã\82¿
.I iov
-¤Ï
+は
.I iovec
-¹½Â¤ÂΤÎÇÛÎó¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
+構造体の配列へのポインタである。
.I iovec
-¹½Â¤ÂΤÏ
+構造体は
.I <sys/uio.h>
-¤Ç°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë:
+で以下のように定義されている:
.PP
.br
.in +4n
.\"O .BR read (2)
.\"O except that multiple buffers are filled.
.BR readv ()
-´Ø¿ô¤Ï¡¢Ê£¿ô¤Î¥Ð¥Ã¥Õ¥¡¤Ë¥Ç¡¼¥¿¤òÆɤ߹þ¤àÅÀ¤ò½ü¤¤¤Æ
+関数は、複数のバッファにデータを読み込む点を除いて
.BR read (2)
-¤ÈÁ´¤¯Æ±ÍͤÎÆ°ºî¤ò¹Ô¤¦¡£
+と全く同様の動作を行う。
.PP
.\"O The
.\"O .BR writev ()
.\"O .BR write (2)
.\"O except that multiple buffers are written out.
.BR writev ()
-´Ø¿ô¤Ï¡¢Ê£¿ô¤Î¥Ð¥Ã¥Õ¥¡¤Î¥Ç¡¼¥¿¤ò½ñ¤½Ð¤¹ÅÀ°Ê³°¤Ï
+関数は、複数のバッファのデータを書き出す点以外は
.BR write (2)
-¤ÈÁ´¤¯Æ±ÍͤÎÆ°ºî¤ò¹Ô¤¦¡£
+と全く同様の動作を行う。
.PP
.\"O Buffers are processed in array order.
.\"O This means that
.\"O before proceeding to
.\"O .IR iov [1],
.\"O and so on.
-¥Ð¥Ã¥Õ¥¡¤ÏÇÛÎó¤Î½ç½ø¤Ç½èÍý¤µ¤ì¤ë¡£¤³¤ì¤Ï¡¢
+バッファは配列の順序で処理される。これは、
.BR readv ()
-¤¬
+が
.IR iov [0]
-¤¬´°Á´¤Ë°ìÇդˤʤë¤Þ¤Ç¥Ç¡¼¥¿¤òµÍ¤á¤Æ¤«¤é¡¢
+が完全に一杯になるまでデータを詰めてから、
.IR iov [1]
-¤Ê¤É¤Ë¿Ê¤à¤³¤È¤ò°ÕÌ£¤¹¤ë
-(¥Ç¡¼¥¿¤¬½½Ê¬¤Ê¤¤¾ì¹ç¤Ï¡¢
+などに進むことを意味する
+(データが十分ない場合は、
.I iov
-¤¬»Ø¤¹¥Ð¥Ã¥Õ¥¡¤Î¤¤¤º¤ì¤â°ìÇդˤʤé¤Ê¤¤)¡£
-ƱÍͤˡ¢
+が指すバッファのいずれも一杯にならない)。
+同様に、
.BR writev ()
-¤Ï
+は
.IR iov [0]
-¤ÎÆâÍƤòÁ´Éô½ñ¤½Ð¤·¤Æ¤«¤é
+の内容を全部書き出してから
.IR iov [1]
-¤Ê¤É¤Ë¿Ê¤à¡£
+などに進む。
.PP
.\"O The data transfers performed by
.\"O .BR readv ()
.\"O (see
.\"O .BR open (2)).
.BR readv ()
-¤È
+と
.BR writev ()
-¤Ë¤è¤ë¥Ç¡¼¥¿Å¾Á÷¤Ï atomic ¤Ë¹Ô¤ï¤ì¤ë¡£¤Ä¤Þ¤ê¡¢
+によるデータ転送は atomic に行われる。つまり、
.BR writev ()
-¤Ë¤è¤ë¥Ç¡¼¥¿½ñ¤¹þ¤ß¤Ï°ì¤Ä¤Î¥Ö¥í¥Ã¥¯¤È¤·¤Æ¹Ô¤ï¤ì¡¢Â¾¤Î¥×¥í¥»¥¹¤Î
-write ¤Ë¤è¤ë½ñ¤¹þ¤ß¤Èº®¤¶¤ê¹ç¤¦¤³¤È¤Ï¤Ê¤¤
-(Îã³°¤Ë´Ø¤·¤Æ¤Ï
+によるデータ書き込みは一つのブロックとして行われ、他のプロセスの
+write による書き込みと混ざり合うことはない
+(例外に関しては
.BR pipe (7)
-¤ò»²¾È¤Î¤³¤È)¡£Æ±Íͤˡ¢
+を参照のこと)。同様に、
.BR readv ()
-¤Ï¥Õ¥¡¥¤¥ë¤«¤éϢ³¤¹¤ë¥Ç¡¼¥¿¥Ö¥í¥Ã¥¯¤¬Æɤ߽Ф¹¤³¤È¤¬Êݾڤµ¤ì¡¢
-Ʊ¤¸¥Õ¥¡¥¤¥ëµ½Ò (file description;
+はファイルから連続するデータブロックが読み出すことが保証され、
+同じファイル記述 (file description;
.BR open (2)
-»²¾È) ¤ò»²¾È¤¹¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò»ý¤Ä¾¤Î¥¹¥ì¥Ã¥É¤ä¥×¥í¥»¥¹¤¬
-¼Â¹Ô¤·¤¿ read Áàºî¤Î±Æ¶Á¤ò¼õ¤±¤ë¤³¤È¤Ï¤Ê¤¤¡£
+参照) を参照するファイルディスクリプタを持つ他のスレッドやプロセスが
+実行した read 操作の影響を受けることはない。
.\"O .SH "RETURN VALUE"
-.SH ÊÖ¤êÃÍ
+.SH 返り値
.\"O On success, the
.\"O .BR readv ()
.\"O function returns the number of bytes read; the
.\"O .BR writev ()
.\"O function returns the number of bytes written.
.\"O On error, \-1 is returned, and \fIerrno\fP is set appropriately.
-À®¸ù¤·¤¿¾ì¹ç¡¢
+成功した場合、
.BR readv ()
-´Ø¿ô¤ÏÆɤ߹þ¤ó¤À¥Ð¥¤¥È¿ô¤òÊÖ¤·¡¢
+関数は読み込んだバイト数を返し、
.BR writev ()
-´Ø¿ô¤Ï½ñ¤¹þ¤ó¤À¥Ð¥¤¥È¿ô¤òÊÖ¤¹¡£
-¥¨¥é¡¼¤Î¾ì¹ç \-1 ¤òÊÖ¤·¡¢\fIerrno\fP ¤òŬÀÚ¤ËÀßÄꤹ¤ë¡£
+関数は書き込んだバイト数を返す。
+エラーの場合 \-1 を返し、\fIerrno\fP を適切に設定する。
.\"O .SH ERRORS
-.SH ¥¨¥é¡¼
+.SH ã\82¨ã\83©ã\83¼
.\"O The errors are as given for
.\"O .BR read (2)
.\"O and
.\"O .BR write (2).
.BR read (2)
-¤ä
+や
.BR write (2)
-¤ÈƱ¤¸¥¨¥é¡¼¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£
+と同じエラーが定義されている。
.\"O Additionally the following error is defined:
-¤µ¤é¤Ë°Ê²¼¤Î¥¨¥é¡¼¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë:
+さらに以下のエラーが定義されている:
.TP
.B EINVAL
.\"O The sum of the
.\"O Or, the vector count \fIiovcnt\fP is less than zero or greater than the
.\"O permitted maximum.
.I iov_len
-¤Î¹ç·×¤¬
+の合計が
.I ssize_t
-¤ÎÈϰϤò¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤¿¡£¤â¤·¤¯¤Ï¡¢
-¥Ù¥¯¥¿¿ô \fIiovcnt\fP ¤¬ 0 ¤è¤ê¾®¤µ¤¤¤«µö²Ä¤µ¤ì¤¿ºÇÂçÃͤè¤ê¤âÂ礤«¤Ã¤¿¡£
+の範囲をオーバーフローした。もしくは、
+ベクタ数 \fIiovcnt\fP が 0 より小さいか許可された最大値よりも大きかった。
.\"O .SH "CONFORMING TO"
-.SH ½àµò
+.SH 準拠
.\"O 4.4BSD (the
.\"O .BR readv ()
.\"O and
.\"O .\" (Says release.libc.)
4.4BSD
.RB ( readv ()
-¤È
+と
.BR writev ()
-´Ø¿ô¤Ï 4.2BSD ¤ÇºÇ½é¤Ë¸½¤ï¤ì¤¿)¡¢POSIX.1-2001¡£
-Linux libc5 ¤Ç¤Ï \fIiovcnt\fP °ú¤¿ô¤Î·¿¤È¤·¤Æ \fIsize_t\fP ¤ò¡¢
-¤³¤ì¤é¤Î´Ø¿ô¤ÎÊÖ¤êÃͤȤ·¤Æ \fIint\fP ¤ò»ÈÍѤ·¤Æ¤¤¤¿¡£
-.\" readv/writev ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï Linux 1.3.40 °ÊÁ°¤Ï¥Ð¥°¤À¤é¤±¤Ç¤¢¤Ã¤¿
-.\" (¤È release.libc ¤Ë½ñ¤«¤ì¤Æ¤¤¤ë)¡£
+関数は 4.2BSD で最初に現われた)、POSIX.1-2001。
+Linux libc5 では \fIiovcnt\fP 引き数の型として \fIsize_t\fP を、
+これらの関数の返り値として \fIint\fP を使用していた。
+.\" readv/writev システムコールは Linux 1.3.40 以前はバグだらけであった
+.\" (と release.libc に書かれている)。
.\"O .SH NOTES
.\"O .SS Linux Notes
-.SH Ãí°Õ
-.SS "Linux ¤Ç¤ÎÃí°Õ"
+.SH 注意
+.SS "Linux での注意"
.\"O POSIX.1-2001 allows an implementation to place a limit on
.\"O the number of items that can be passed in
.\"O .IR iov .
.\"O .IR sysconf(_SC_IOV_MAX) .
.\"O On Linux, the limit advertised by these mechanisms is 1024,
.\"O which is the true kernel limit.
-POSIX.1-2001 ¤Ç¤Ï¡¢
+POSIX.1-2001 では、
.I iov
-¤ÇÅϤ¹¤³¤È¤¬¤Ç¤¤ëÍ×ÁÇ¿ô¤Ë¾å¸Â¤òÀߤ±¤ë¼ÂÁõ¤¬Ç§¤á¤é¤ì¤Æ¤¤¤ë¡£
-¼ÂÁõ¤Ï¡¢
+で渡すことができる要素数に上限を設ける実装が認められている。
+実装は、
.I <limits.h>
-¤Î
+の
.B IOV_MAX
-¤òÄêµÁ¤¹¤ë¤³¤È¤ä¡¢¼Â¹Ô»þ¤Ë
+を定義することや、実行時に
.I sysconf(_SC_IOV_MAX)
-¤ÎÊÖ¤êÃÍ·Ðͳ¤Ç¡¢¤³¤Î¾å¸Â¤ò¹¹ð¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
-Linux ¤Ç¤Ï¡¢¤³¤Î»ÅÁȤߤˤè¤ê¹¹ð¤µ¤ì¤ë¾å¸Â¤Ï 1024 ¤Ç¤¢¤ê¡¢
-¤³¤ÎÃͤϥ«¡¼¥Í¥ë¤Ç¤Î¾å¸Â¤½¤Î¤â¤Î¤Ç¤¢¤ë¡£
+の返り値経由で、この上限を広告することができる。
+Linux では、この仕組みにより広告される上限は 1024 であり、
+この値はカーネルでの上限そのものである。
.\"O However, the glibc wrapper functions do some extra work if
.\"O they detect that the underlying kernel system call failed because this
.\"O limit was exceeded.
.\"O .BR writev ()
.\"O performs the analogous task using a temporary buffer and a call to
.\"O .BR write (2).
-°ìÊý¤Ç¡¢glibc ¤Î¥é¥Ã¥Ñ¡¼´Ø¿ô¤Ï¡¢¤½¤Î´Ø¿ô¤ÎÆâÉô¤Ç¸Æ¤Ð¤ì¤ë¥«¡¼¥Í¥ë¡¦
-¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬¤³¤Î¾å¸Â¤òĶ²á¤·¤Æ¼ºÇÔ¤·¤¿¤³¤È¤ò¸¡½Ð¤¹¤ë¤È¡¢
-ÄɲäÎÆ°ºî¤ò¤¹¤ë¡£
+一方で、glibc のラッパー関数は、その関数の内部で呼ばれるカーネル・
+システムコールがこの上限を超過して失敗したことを検出すると、
+追加の動作をする。
.BR readv ()
-¤Î¾ì¹ç¡¢¥é¥Ã¥Ñ¡¼´Ø¿ô¤Ï
+の場合、ラッパー関数は
.I iov
-¤Ç»ØÄꤵ¤ì¤¿Á´¤Æ¤ÎÍ×ÁǤò³ÊǼ¤Ç¤¤ëÂ礤µ¤Î°ì»þ¥Ð¥Ã¥Õ¥¡¤ò³ä¤êÅö¤Æ¡¢
+で指定された全ての要素を格納できる大きさの一時バッファを割り当て、
.BR read (2)
-¤ò¸Æ¤Ó½Ð¤¹ºÝ¤Ë¤½¤Î¥Ð¥Ã¥Õ¥¡¤òÅϤ·¡¢
-¤½¤Î¥Ð¥Ã¥Õ¥¡¤Î¥Ç¡¼¥¿¤ò
+を呼び出す際にそのバッファを渡し、
+そのバッファのデータを
.I iov
-¤Î³ÆÍ×ÁǤÎ
+の各要素の
.I iov_base
-¥Õ¥£¡¼¥ë¥É¤¬»ØÄꤹ¤ë¾ì½ê¤Ë¥³¥Ô¡¼¤·¤Æ¤«¤é¡¢
-¤½¤Î¥Ð¥Ã¥Õ¥¡¤ò²òÊü¤¹¤ë¡£
+フィールドが指定する場所にコピーしてから、
+そのバッファを解放する。
.BR writev ()
-¤Î¥é¥Ã¥Ñ¡¼´Ø¿ô¤â¡¢Æ±¤¸¤è¤¦¤Ë°ì»þ¥Ð¥Ã¥Õ¥¡¤ò»È¤Ã¤Æ
+のラッパー関数も、同じように一時バッファを使って
.BR write (2)
-¤ò¸Æ¤Ó½Ð¤¹¡£
+を呼び出す。
.\"O .SH BUGS
-.SH ¥Ð¥°
+.SH ã\83\90ã\82°
.\"O It is not advisable to mix calls to functions like
.\"O .BR readv ()
.\"O or
.\"O which operate on file descriptors, with the functions from the stdio
.\"O library; the results will be undefined and probably not what you want.
.BR readv ()
-¤ä
+や
.BR writev ()
-¤Î¤è¤¦¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ¹¤ëÁàºî¤ò¹Ô¤¦´Ø¿ô¤È¡¢
-ɸ½àÆþ½ÐÎϥ饤¥Ö¥é¥ê¤Î´Ø¿ô¤ò¤´¤Á¤ã¤Þ¤¼¤Ë¤·¤Æ¸Æ¤Ö¤Î¤Ï¤ªÁ¦¤á¤·¤Ê¤¤¡£
-¤É¤ó¤Ê·ë²Ì¤Ë¤Ê¤ë¤«¤ÏÄêµÁ¤µ¤ì¤Æ¤ª¤é¤º¡¢
-¤ª¤½¤é¤¯Íߤ·¤¤·ë²Ì¤ÏÆÀ¤é¤ì¤Ê¤¤¤À¤í¤¦¡£
+のようなファイルディスクリプタに対する操作を行う関数と、
+標準入出力ライブラリの関数をごちゃまぜにして呼ぶのはお薦めしない。
+どんな結果になるかは定義されておらず、
+おそらく欲しい結果は得られないだろう。
.\"O .SH EXAMPLE
-.SH Îã
+.SH 例
.\"O The following code sample demonstrates the use of
.\"O .BR writev ():
-°Ê²¼¤Î¥µ¥ó¥×¥ë¥³¡¼¥É¤Ï
+以下のサンプルコードは
.BR writev ()
-¤Î»ÈÍÑÊýË¡¤ò¼¨¤¹¤â¤Î¤Ç¤¢¤ë¡£
+の使用方法を示すものである。
.in +4n
.nf
.fi
.in
.\"O .SH "SEE ALSO"
-.SH ´ØÏ¢¹àÌÜ
+.SH 関連項目
.BR read (2),
.BR write (2)