OSDN Git Service

Update release for LDP 3.67
[linuxjm/LDP_man-pages.git] / release / man2 / select.2
index 8d25252..cee10fb 100644 (file)
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH SELECT 2 2012\-08\-17 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 2000-03-12, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Updated & Modified 2001-06-04, Yuichi SATO <ysato@h4.dion.ne.jp>
+.\" Updated & Modified 2001-07-01, Yuichi SATO
+.\" Updated & Modifedd 2002-01-14, Yuichi SATO
+.\" Updated 2002-09-24, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
+.\" Updated 2003-01-19, Akihiro MOTOKI
+.\" Updated 2005-03-17, Akihiro MOTOKI
+.\" Updated 2006-04-16, Akihiro MOTOKI, LDP v2.28
+.\" Updated 2006-07-23, Akihiro MOTOKI, LDP v2.36
+.\" Updated 2007-09-08, Akihiro MOTOKI, LDP v2.64
+.\" Updated 2008-08-06, Akihiro MOTOKI, LDP v3.05
+.\" Updated 2012-05-30, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH SELECT 2 2014\-01\-31 Linux "Linux Programmer's Manual"
 .SH 名前
 select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO \- 同期 I/O の多重化
 .SH 書式
@@ -86,8 +103,7 @@ glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参
 になるまで待つことができる。 ファイルディスクリプタが ready (準備ができた) とは、 対応する I/O 操作 (例えば \fBread\fP(2)
 など) が停止 (block) なしに実行可能な状態にあることを意味する。
 .PP
-The operation of \fBselect\fP()  and \fBpselect\fP()  is identical, other than
-these three differences:
+\fBselect\fP()  と \fBpselect\fP()  の動作は同じであるが、以下の 3 点が異なる:
 .TP 
 (i)
 \fBselect\fP()  では、タイムアウト時間の指定に構造体 \fIstruct timeval\fP (秒・マイクロ秒単位) を用いる。 一方、
@@ -113,14 +129,19 @@ these three differences:
 .PP
 \fInfds\fP は 3 つの集合に含まれるファイルディスクリプタの最大値に 1 を足したものである。
 .PP
-\fItimeout\fP 引き数で、ファイルディスクリプタが ready になるのを待って
-\fBselect\fP() が停止する最小の停止時間を指定する
-(この停止時間はシステムクロックの粒度に切り上げられ、
-カーネルのスケジューリング遅延により少しだけ長くなる可能性がある)。
-\fItimeval\fP 構造体の両方のフィールドが 0 の場合、 \fBselect\fP() はすぐに復
-帰する (この機能はポーリング (polling) を行うのに便利である)。
-\fItimeout\fP に NULL (タイムアウトなし) が指定されると、 \fBselect\fP() は無
-期限に停止 (block) する。
+\fItimeout\fP 引き数は、 \fBselect\fP() がファイルディスクリプタが ready になるのを待って停止する時間を指定する。
+呼び出しは以下のいずれかになるまで停止する。
+.IP * 3
+ファイルディスクリプタが利用可能になる。
+.IP *
+システムコールがシグナルハンドラにより割り込まれた。
+.IP *
+タイムアウト時間が満了した。
+.PP
+この \fItimeout\fP 時間はシステムクロックの粒度に切り上げられ、
+カーネルのスケジューリング遅延により少しだけ長くなる可能性がある点に注意すること。 \fItimeval\fP 構造体の両方のフィールドが 0 の場合、
+\fBselect\fP() はすぐに復帰する (この機能はポーリング (polling) を行うのに便利である)。 \fItimeout\fP に NULL
+(タイムアウトなし) が指定されると、 \fBselect\fP() は無期限に停止 (block) する。
 .PP
 \fIsigmask\fP は、シグナルマスク (\fBsigprocmask\fP(2)  を参照) へのポインタである。 \fIsigmask\fP が NULL
 でない場合、 \fBpselect\fP()  は \fIsigmask\fP が指しているシグナルマスクで現在のシグナルマスクを置き換えてから、 "select"
@@ -189,7 +210,7 @@ Linux では、 \fBselect\fP()  は \fItimeout\fP を変更し、残りの停止
 成功した場合、 \fBselect\fP()  と \fBpselect\fP()  は更新された 3 つのディスクリプタ集合に含まれている
 ファイルディスクリプタの数 (つまり、 \fIreadfds\fP, \fIwritefds\fP, \fIexceptfds\fP 中の 1 になっているビットの総数)
 を返す。 何も起こらずに時間切れになった場合、 ディスクリプタの数は 0 になることもある。 エラーならば \-1 を返し、 \fIerrno\fP
-に適切な値が設定される; 集合と \fItimeout\fP は未定義となるので、エラーが起こった後はそれらの内容を信頼してはならない
+にエラーを示す値が設定される; ファイルディスクリプタ集合は変更されず、 \fItimeout\fP は不定となる
 .SH エラー
 .TP 
 \fBEBADF\fP
@@ -209,8 +230,8 @@ Linux では、 \fBselect\fP()  は \fItimeout\fP を変更し、残りの停止
 でエミュレートされていた (「バグ」の章を参照)。
 .SH 準拠
 \fBselect\fP()  は POSIX.1\-2001 と 4.4BSD (\fBselect\fP()  は 4.2BSD で最初に登場した) に準拠する。
-BSD ソケット層のクローンをサポートしている非 BSD システム (System V 系も含む) との間でだいたい移植性がある。しかし System
-V 系では たいがい timeout 変数を exit の前にセットするが、 BSD 系ではそうでないので注意すること。
+BSD ソケット層のクローンをサポートしている非 BSD システム (System\ V 系も含む) との間でだいたい移植性がある。しかし
+System\ V 系では たいがい timeout 変数を exit の前にセットするが、 BSD 系ではそうでないので注意すること。
 .PP
 \fBpselect\fP()  は POSIX.1g と POSIX.1\-2001 で定義されている。
 .SH 注意
@@ -241,20 +262,18 @@ struct timeval {
 悪いことに glibc 2.0 以前では \fBpselect\fP()  のプロトタイプが間違っている。 glibc 2.1 から 2.2.1 では
 \fB_GNU_SOURCE\fP が定義されている場合に、 \fBpselect\fP()  が提供される。 glibc 2.2.2 以降では、
 \fBpselect\fP()  を使用するには、「書式」に記載された要件を満たす必要がある。
-.SS "Multithreaded applications"
-If a file descriptor being monitored by \fBselect\fP()  is closed in another
-thread, the result is unspecified.  On some UNIX systems, \fBselect\fP()
-unblocks and returns, with an indication that the file descriptor is ready
-(a subsequent I/O operation will likely fail with an error, unless another
-the file descriptor reopened between the time \fBselect\fP()  returned and the
-I/O operations was performed).  On Linux (and some other systems), closing
-the file descriptor in another thread has no effect on \fBselect\fP().  In
-summary, any application that relies on a particular behavior in this
-scenario must be considered buggy.
-.SS "Linux notes"
-The \fBpselect\fP()  interface described in this page is implemented by glibc.
-The underlying Linux system call is named \fBpselect6\fP().  This system call
-has somewhat different behavior from the glibc wrapper function.
+.SS マルチスレッド・アプリケーション
+\fBselect\fP() で監視中のファイルディスクリプタが別のスレッドでクローズされた場合、どのような結果になるかは規定されていない。いくつかの
+UNIX システムでは、 \fBselect\fP() は停止 (block) せず、すぐ返り、ファイルディスクリプタが ready だと報告される
+(\fBselect\fP() が返ってから I/O 操作が実行されるまでの間に、 別のファイルディスクリプタが再度オープンされない限り、 それ以降の I/O
+操作はおそらく失敗するだろう)。 Linux (や他のいくつかのシステム) では、 別のスレッドでファイルディスクリプタがクローズされても
+\fBselect\fP() には影響を与えない。
+まとめると、このような場合に特定の動作に依存しているアプリケーションは「バグっている」と考えなければならない。
+.SS "Linux での注意"
+このページで説明している \fBpselect\fP() のインターフェースは、glibc に
+実装されているものである。内部で呼び出される Linux のシステムコールは
+\fBpselect6\fP() という名前である。このシステムコールは glibc のラッパー
+関数とは少し違った動作をする。
 
 Linux の \fBpselect6\fP() システムコールは \fItimeout\fP 引き数を変更する。
 しかし、glibc のラッパー関数は、システムコールに渡す timeout 引き数と
@@ -262,8 +281,8 @@ Linux の \fBpselect6\fP() システムコールは \fItimeout\fP 引き数を
 \fBpselect\fP() 関数は \fItimeout\fP 引き数を変更しない。
 これが POSIX.1\-2001 が要求している動作である。
 
-The final argument of the \fBpselect6\fP()  system call is not a \fIsigset_t\ *\fP
-pointer, but is instead a structure of the form:
+\fBpselect6\fP() システムコールの最後の引き数は \fIsigset_t\ *\fP 型の
+ポインタではなく、以下に示す構造体である。
 .in +4
 .nf
 
@@ -350,6 +369,6 @@ main(void)
 
 考察と使用例の書かれたチュートリアルとして、 \fBselect_tut\fP(2)  がある。
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.67 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。