.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH READ 2 2013\-02\-12 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
+.\" all rights reserved.
+.\" Translated 1997-02-23, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Modified 1997-09-28, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Updated & Modified 2005-02-24, Yuichi SATO <ysato444@yahoo.co.jp>
+.\" Updated 2005-09-06, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
+.\" Updated 2005-10-14, Akihiro MOTOKI
+.\" Updated 2008-02-10, Akihiro MOTOKI, LDP v2.77
+.\" Updated 2009-04-13, Akihiro MOTOKI, LDP v3.20
+.\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH READ 2 2014\-05\-04 Linux "Linux Programmer's Manual"
.SH 名前
-read \- ファイルディスクリプタから読み込む
+read \- ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8bã\82\89èªã\81¿è¾¼ã\82\80
.SH 書式
.nf
\fB#include <unistd.h>\fP
\fBssize_t read(int \fP\fIfd\fP\fB, void *\fP\fIbuf\fP\fB, size_t \fP\fIcount\fP\fB);\fP
.fi
.SH 説明
-\fBread\fP() はファイルディスクリプタ (file descriptor) \fIfd\fP から最大 \fIcount\fP バイトを \fIbuf\fP
+\fBread\fP() はファイルディスクリプター (file descriptor) \fIfd\fP から最大 \fIcount\fP バイトを \fIbuf\fP
で始まるバッファーへ読み込もうとする。
seek に対応しているファイルでは、read
.SH エラー
.TP
\fBEAGAIN\fP
-ファイルディスクリプタ \fIfd\fP がソケット以外のファイルを参照していて、 非停止 (nonblocking) モード (\fBO_NONBLOCK\fP)
-に設定されており、読み込みを行うと停止する状況にある。
+ファイルディスクリプター \fIfd\fP がソケット以外のファイルを参照していて、 非停止 (nonblocking) モード
+(\fBO_NONBLOCK\fP) に設定されており、読み込みを行うと停止する状況にある。
.TP
\fBEAGAIN\fP または \fBEWOULDBLOCK\fP
.\" Actually EAGAIN on Linux
-ファイルディスクリプタ \fIfd\fP がソケットを参照していて、非停止 (nonblocking) モード (\fBO_NONBLOCK\fP)
+ファイルディスクリプター \fIfd\fP がソケットを参照していて、非停止 (nonblocking) モード (\fBO_NONBLOCK\fP)
に設定されており、読み込みを行うと停止する状況にある。 POSIX.1\-2001 は、この場合にどちらのエラーを返すことも認めており、 これら 2
つの定数が同じ値を持つことも求めていない。 したがって、移植性が必要なアプリケーションでは、両方の可能性を 確認すべきである。
.TP
\fBEBADF\fP
-\fIfd\fP が有効なファイルディスクリプタでないか、読み込みのために オープン (open) されていない。
+\fIfd\fP ã\81\8cæ\9c\89å\8a¹ã\81ªã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81§ã\81ªã\81\84ã\81\8bã\80\81èªã\81¿è¾¼ã\81¿ã\81®ã\81\9fã\82\81ã\81« ã\82ªã\83¼ã\83\97ã\83³ (open) ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\80\82
.TP
\fBEFAULT\fP
\fIbuf\fP がアクセス可能なアドレス空間の外にある。
\fIbuf\fP に指定されたアドレス、 \fIcount\fP に指定された値、 現在のファイルオフセットのいずれかの アラインメントが不適切である。
.TP
\fBEINVAL\fP
-\fIfd\fP が \fBtimerfd_create\fP(2) の呼び出しで作成されたが、 \fBread\fP() に間違ったサイズのバッファが渡された。
+\fIfd\fP ã\81\8c \fBtimerfd_create\fP(2) ã\81®å\91¼ã\81³å\87ºã\81\97ã\81§ä½\9cæ\88\90ã\81\95ã\82\8cã\81\9fã\81\8cã\80\81 \fBread\fP() ã\81«é\96\93é\81\95ã\81£ã\81\9fã\82µã\82¤ã\82ºã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81\8c渡ã\81\95ã\82\8cã\81\9fã\80\82
さらなる情報は \fBtimerfd_create\fP(2) を参照のこと。
.TP
\fBEIO\fP
-I/O ã\82¨ã\83©ã\83¼ã\80\82ã\81\93ã\82\8cã\81¯ä¾\8bã\81\88ã\81°ã\83\97ã\83ã\82»ã\82¹ã\81\8cã\83\90ã\83\83ã\82¯ã\82°ã\83©ã\83³ã\83\89ã\83»ã\83\97ã\83ã\82»ã\82¹ã\82°ã\83«ã\83¼ã\83\97ã\81§ã\80\81ã\81\9dã\82\8cã\82\92å\88¶å¾¡ã\81\97ã\81¦ã\81\84ã\82\8b端æ\9c«ã\81\8bã\82\89èªã\81¿è¾¼ã\82\82ã\81\86ã\81¨ã\81\97ã\80\81 \fBSIGTTIN\fP ã\81\8cç\84¡è¦\96
+I/O エラー。これは例えばプロセスがバックグランドプロセスグループで、それを制御している端末から読み込もうとし、 \fBSIGTTIN\fP が無視
(ignore) または禁止 (blocking) されている場合や、 そのプロセスグループが孤立 (orphan) している場合に起こる。
またディスクやテープを読んでいる時に低レベル I/O エラー が発生した場合にも起こる。
.TP
(最終ファイルアクセス時刻) の更新をサーバーに送らず、クライアント側でキャッシュを読むことに満足して いれば、サーバー側での read
は発生しないので st_atime の更新は行なわれからだ。 UNIX の方式では、クライアント側の属性のキャッシングを無効にすることで、
これを得ることができる。しかしほとんどの状況ではこれは続くサーバーの 負荷を増加させ、パフォーマンスの低下をもたらす。
+.SH バグ
+POSIX.1\-2008/SUSv4 セクション XSI 2.9.7 ("Thread Interactions with Regular File
+Operations") によると、
+
+.RS 4
+以下のすべての関数では、 通常ファイルもしくはシンボリックリンクに対する操作では POSIX.1\-2008
+で規定された効果が互いにアトミックに行われなければならない: ...
+.RE
+
+.\" http://thread.gmane.org/gmane.linux.kernel/1649458
+.\" From: Michael Kerrisk (man-pages <mtk.manpages <at> gmail.com>
+.\" Subject: Update of file offset on write() etc. is non-atomic with I/O
+.\" Date: 2014-02-17 15:41:37 GMT
+.\" Newsgroups: gmane.linux.kernel, gmane.linux.file-systems
+.\" commit 9c225f2655e36a470c4f58dbbc99244c5fc7f2d4
+.\" Author: Linus Torvalds <torvalds@linux-foundation.org>
+.\" Date: Mon Mar 3 09:36:58 2014 -0800
+.\"
+.\" vfs: atomic f_pos accesses as per POSIX
+この後に書かれている API の中に \fBread\fP() と \fBreadv\fP(2) である。 スレッド(やプロセス)
+間でアトミックに適用することが求められる効果の一つとして、 ファイルオフセットの更新がある。 しかしながら、 バージョン 3.14 より前の Linux
+では、 この限りではない。 オープンファイル記述 (open file description) を共有する 2 つのプロセスが同時に
+\fBread\fP() (や \fBreadv\fP(2)) を実行した場合、 この I/O 操作ではファイルオフセットの更新に関してはアトミックではなく、 2
+つのプロセスの read で取得されるデータブロックが (間違って) 重なる可能性がある。 この問題は Linux 3.14 で修正された。
.SH 関連項目
\fBclose\fP(2), \fBfcntl\fP(2), \fBioctl\fP(2), \fBlseek\fP(2), \fBopen\fP(2), \fBpread\fP(2),
\fBreaddir\fP(2), \fBreadlink\fP(2), \fBreadv\fP(2), \fBselect\fP(2), \fBwrite\fP(2),
\fBfread\fP(3)
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。