OSDN Git Service

長音記号の修正を release に反映
[linuxjm/LDP_man-pages.git] / release / man2 / select.2
index ce32711..1b23436 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 2015\-01\-22 Linux "Linux Programmer's Manual"
 .SH 名前
 select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO \- 同期 I/O の多重化
 .SH 書式
@@ -81,10 +98,10 @@ glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参
 .sp
 \fBpselect\fP(): _POSIX_C_SOURCE\ >=\ 200112L || _XOPEN_SOURCE\ >=\ 600
 .SH 説明
-\fBselect\fP()  や \fBpselect\fP()  を使うと、プログラムで複数のファイルディスクリプタを監視し、
-一つ以上のファイルディスクリプタがある種の I/O 操作の 「ready (準備ができた)」状態 (例えば、読み込み可能になった状態)
\81«ã\81ªã\82\8bã\81¾ã\81§å¾\85ã\81¤ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\82\8bã\80\82 ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\81\8c ready (æº\96å\82\99ã\81\8cã\81§ã\81\8dã\81\9f) ã\81¨ã\81¯ã\80\81 å¯¾å¿\9cã\81\99ã\82\8b I/O æ\93\8dä½\9c (ä¾\8bã\81\88ã\81° \fBread\fP(2)
-など) が停止 (block) なしに実行可能な状態にあることを意味する。
+\fBselect\fP()  ã\82\84 \fBpselect\fP()  ã\82\92使ã\81\86ã\81¨ã\80\81ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81§è¤\87æ\95°ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\82\92ç\9b£è¦\96ã\81\97ã\80\81
+ä¸\80ã\81¤ä»¥ä¸\8aã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8cã\81\82ã\82\8b種ã\81® I/O æ\93\8dä½\9cã\81® ã\80\8cready (æº\96å\82\99ã\81\8cã\81§ã\81\8dã\81\9f\80\8dç\8a¶æ\85\8b (ä¾\8bã\81\88ã\81°ã\80\81読ã\81¿è¾¼ã\81¿å\8f¯è\83½ã\81«ã\81ªã\81£ã\81\9fç\8a¶æ\85\8b)
\81«ã\81ªã\82\8bã\81¾ã\81§å¾\85ã\81¤ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\82\8bã\80\82 ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8c ready (æº\96å\82\99ã\81\8cã\81§ã\81\8dã\81\9f) ã\81¨ã\81¯ã\80\81 (\fBread\fP(2)  ã\81ªã\81©ã\81®) å¯¾å¿\9cã\81\99ã\82\8b I/O
+操作が停止 (block) なしに実行したり、 十分小さな \fBwrite\fP(2) を実行したりできる状態にあることを意味する。
 .PP
 \fBselect\fP()  と \fBpselect\fP()  の動作は同じであるが、以下の 3 点が異なる:
 .TP 
@@ -99,29 +116,35 @@ glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参
 \fBselect\fP()  は \fIsigmask\fP 引き数を持たない。その動作は \fIsigmask\fP に NULL を指定した場合の
 \fBpselect\fP()  と同じである。
 .PP
-3 つの独立したファイルディスクリプタ集合の監視を行う。 \fIreadfds\fP に入れられたディスクリプタについては、読み込みが可能かどうかを 監視する
-(より正確にいうと、停止 (block) なしで読むことができるかを 調べる。ファイルの終端 (end\-of\-file) の場合も、
-ファイルディスクリプタは読み込み可能として扱われる)。 \fIwritefds\fP に入れられたディスクリプタについては、停止せずに書き込みが
-可能かどうかを監視する。 \fIexceptfds\fP にあるものについては、例外の監視を行なう。システムコール終了時に、
-どのファイルディスクリプタの状態が実際に変化したか示すために、 集合の内容が変更される。
-ある種別のイベントを監視したいファイルディスクリプタが一つもない場合には、 対応するファイルディスクリプタ集合に NULL を指定することができる。
+3 つの独立したファイルディスクリプター集合の監視を行う。 \fIreadfds\fP に入れられたディスクリプターについては、読み込みが可能かどうかを
+監視する (より正確にいうと、停止 (block) なしで読むことができるかを 調べる。ファイルの終端 (end\-of\-file) の場合も、
+ファイルディスクリプターは読み込み可能として扱われる)。 \fIwritefds\fP
+に入れられたディスクリプターについては、書き込み用に利用可能な領域があるかを監視する (ただし、大きな書き込みの場合には停止する可能性はある)。
+\fIexceptfds\fP にあるものについては、例外の監視を行なう。システムコール終了時に、
+どのファイルディスクリプターの状態が実際に変化したか示すために、 集合の内容が変更される。
+ある種別のイベントを監視したいファイルディスクリプターが一つもない場合には、 対応するファイルディスクリプター集合に NULL を指定することができる。
 .PP
 集合を操作するために 4 つのマクロが提供されている。 \fBFD_ZERO\fP()  は集合を消去する。 \fBFD_SET\fP()  と
-\fBFD_CLR\fP()  はそれぞれ指定したファイルディスクリプタの集合への追加、削除を行う。 \fBFD_ISSET\fP()
-は集合にファイルディスクリプタがあるかどうか調べる; このマクロは \fBselect\fP()  が終了した後に使うと便利である。
+\fBFD_CLR\fP()  はそれぞれ指定したファイルディスクリプターの集合への追加、削除を行う。 \fBFD_ISSET\fP()
+は集合にファイルディスクリプターがあるかどうか調べる; このマクロは \fBselect\fP()  が終了した後に使うと便利である。
+.PP
+\fInfds\fP は 3 つの集合に含まれるファイルディスクリプターの最大値に 1 を足したものである。
 .PP
-\fInfds\fP は 3 つの集合に含まれるファイルディスクリプタの最大値に 1 を足したものである。
+\fItimeout\fP 引き数は、 \fBselect\fP() がファイルディスクリプターが ready になるのを待って停止する時間を指定する。
+呼び出しは以下のいずれかになるまで停止する。
+.IP * 3
+ファイルディスクリプターが利用可能になる。
+.IP *
+システムコールがシグナルハンドラーにより割り込まれた。
+.IP *
+タイムアウト時間が満了した。
 .PP
-\fItimeout\fP 引き数で、ファイルディスクリプタが ready になるのを待って
-\fBselect\fP() が停止する最小の停止時間を指定する
-(この停止時間はシステムクロックの粒度に切り上げられ、
-カーネルのスケジューリング遅延により少しだけ長くなる可能性がある)。
-\fItimeval\fP 構造体の両方のフィールドが 0 の場合、 \fBselect\fP() はすぐに復
-帰する (この機能はポーリング (polling) を行うのに便利である)。
-\fItimeout\fP に NULL (タイムアウトなし) が指定されると、 \fBselect\fP() は無
-期限に停止 (block) する。
+この \fItimeout\fP 時間はシステムクロックの粒度に切り上げられ、
+カーネルのスケジューリング遅延により少しだけ長くなる可能性がある点に注意すること。 \fItimeval\fP 構造体の両方のフィールドが 0 の場合、
+\fBselect\fP() はすぐに復帰する (この機能はポーリング (polling) を行うのに便利である)。 \fItimeout\fP に NULL
+(タイムアウトなし) が指定されると、 \fBselect\fP() は無期限に停止 (block) する。
 .PP
-\fIsigmask\fP は、シグナルマスク (\fBsigprocmask\fP(2)  を参照) へのポインタである。 \fIsigmask\fP が NULL
+\fIsigmask\fP ã\81¯ã\80\81ã\82·ã\82°ã\83\8aã\83«ã\83\9eã\82¹ã\82¯ (\fBsigprocmask\fP(2)  ã\82\92å\8f\82ç\85§) ã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\81§ã\81\82ã\82\8bã\80\82 \fIsigmask\fP ã\81\8c NULL
 でない場合、 \fBpselect\fP()  は \fIsigmask\fP が指しているシグナルマスクで現在のシグナルマスクを置き換えてから、 "select"
 関数を実行し、 終了後にシグナルマスクを元のシグナルマスクに戻す。
 .PP
@@ -142,8 +165,8 @@ glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参
     pthread_sigmask(SIG_SETMASK, &origmask, NULL);
 .fi
 .PP
-\fBpselect\fP()  が必要になる理由は、シグナルやファイルディスクリプタの状態変化を 待ちたいときには、競合状態を避けるために atomic
-なテストが必要になる からである。 (シグナルハンドラが大域フラグを設定して戻る場合を考えてみよう。 この大域フラグのテストに続けて
+\fBpselect\fP()  ã\81\8cå¿\85è¦\81ã\81«ã\81ªã\82\8bç\90\86ç\94±ã\81¯ã\80\81ã\82·ã\82°ã\83\8aã\83«ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81®ç\8a¶æ\85\8bå¤\89å\8c\96ã\82\92 å¾\85ã\81¡ã\81\9fã\81\84ã\81¨ã\81\8dã\81«ã\81¯ã\80\81競å\90\88ç\8a¶æ\85\8bã\82\92é\81¿ã\81\91ã\82\8bã\81\9fã\82\81ã\81« atomic
\81ªã\83\86ã\82¹ã\83\88ã\81\8cå¿\85è¦\81ã\81«ã\81ªã\82\8b ã\81\8bã\82\89ã\81§ã\81\82ã\82\8bã\80\82 (ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8c大å\9f\9fã\83\95ã\83©ã\82°ã\82\92設å®\9aã\81\97ã\81¦æ\88»ã\82\8bå ´å\90\88ã\82\92è\80\83ã\81\88ã\81¦ã\81¿ã\82\88ã\81\86ã\80\82 ã\81\93ã\81®å¤§å\9f\9fã\83\95ã\83©ã\82°ã\81®ã\83\86ã\82¹ã\83\88ã\81«ç¶\9aã\81\91ã\81¦
 \fBselect\fP()  を呼び出すと、 シグナルがテストの直後かつ呼び出しの直前に届いた時には \fBselect\fP()
 は永久にハングしてしまうかもしれない。 一方、 \fBpselect\fP()  を使うと、まずシグナルを禁止 (block)
 して、入ってくるシグナルを操作し、 望みの \fIsigmask\fP で \fBpselect\fP()  を呼び出すことで、前記の競合を避けることができる。)
@@ -181,41 +204,44 @@ struct timespec {
 .\" Linux follows SUSv2 and sets the bit masks to zero upon a timeout.
 Linux では、 \fBselect\fP()  は \fItimeout\fP を変更し、残りの停止時間を反映するようになっているが、
 他のほとんどの実装ではこのようになっていない (POSIX.1\-2001 はどちらの動作も認めている)。 このため、 \fItimeout\fP
\82\92å\8f\82ç\85§ã\81\97ã\81¦ã\81\84ã\82\8b Linux ã\81®ã\82³ã\83¼ã\83\89ã\82\92ä»\96ã\81®ã\82ªã\83\9aã\83¬ã\83¼ã\83\86ã\82£ã\83³ã\82°ã\83»ã\82·ã\82¹ã\83\86ã\83 ã\81¸ ç§»æ¤\8dã\81\99ã\82\8bå ´å\90\88ã\80\81å\95\8fé¡\8cã\81\8cèµ·ã\81\93ã\82\8bã\80\82 ã\81¾ã\81\9fã\80\81ã\83«ã\83¼ã\83\97ã\81®ä¸­ã\81§ \fItimeval\fP
+を参照している Linux のコードを他のオペレーティングシステムへ 移植する場合、問題が起こる。 また、ループの中で \fItimeval\fP
 構造体を初期化せずにそのまま再利用して \fBselect\fP()  を複数回行なっているコードを Linux へ移植する場合にも、問題が起こる。
 \fBselect\fP()  から復帰した後は \fItimeout\fP は未定義であると考えるべきである。
 .SH 返り値
-成功した場合、 \fBselect\fP()  と \fBpselect\fP()  は更新された 3 つのディスクリプタ集合に含まれている
\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\81®æ\95° (ã\81¤ã\81¾ã\82\8aã\80\81 \fIreadfds\fP, \fIwritefds\fP, \fIexceptfds\fP ä¸­ã\81® 1 ã\81«ã\81ªã\81£ã\81¦ã\81\84ã\82\8bã\83\93ã\83\83ã\83\88ã\81®ç·\8fæ\95°)
\82\92è¿\94ã\81\99ã\80\82 ä½\95ã\82\82èµ·ã\81\93ã\82\89ã\81\9aã\81«æ\99\82é\96\93å\88\87ã\82\8cã\81«ã\81ªã\81£ã\81\9få ´å\90\88ã\80\81 ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\81®æ\95°ã\81¯ 0 ã\81«ã\81ªã\82\8bã\81\93ã\81¨ã\82\82ã\81\82ã\82\8bã\80\82 ã\82¨ã\83©ã\83¼ã\81ªã\82\89ã\81° \-1 ã\82\92è¿\94ã\81\97ã\80\81 \fIerrno\fP
-に適切な値が設定される; 集合と \fItimeout\fP は未定義となるので、エラーが起こった後はそれらの内容を信頼してはならない
+成功した場合、 \fBselect\fP()  と \fBpselect\fP()  は更新された 3 つのディスクリプタ集合に含まれている
\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81®æ\95° (ã\81¤ã\81¾ã\82\8aã\80\81 \fIreadfds\fP, \fIwritefds\fP, \fIexceptfds\fP ä¸­ã\81® 1
\81«ã\81ªã\81£ã\81¦ã\81\84ã\82\8bã\83\93ã\83\83ã\83\88ã\81®ç·\8fæ\95°) ã\82\92è¿\94ã\81\99ã\80\82 ä½\95ã\82\82èµ·ã\81\93ã\82\89ã\81\9aã\81«æ\99\82é\96\93å\88\87ã\82\8cã\81«ã\81ªã\81£ã\81\9få ´å\90\88ã\80\81 ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81®æ\95°ã\81¯ 0 ã\81«ã\81ªã\82\8bã\81\93ã\81¨ã\82\82ã\81\82ã\82\8bã\80\82 ã\82¨ã\83©ã\83¼ã\81ªã\82\89ã\81° \-1 ã\82\92è¿\94ã\81\97ã\80\81
+\fIerrno\fP にエラーを示す値が設定される; ファイルディスクリプター集合は変更されず、 \fItimeout\fP は不定となる
 .SH エラー
 .TP 
 \fBEBADF\fP
\81\84ã\81\9aã\82\8cã\81\8bã\81®é\9b\86å\90\88ã\81«ç\84¡å\8a¹ã\81ªã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\81\8cæ\8c\87å®\9aã\81\95ã\82\8cã\81\9f (ã\81\8aã\81\9dã\82\89ã\81\8fã\81¯ã\80\81ã\81\99ã\81§ã\81«ã\82¯ã\83­ã\83¼ã\82ºã\81\95ã\82\8cã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿か、
-エラーが発生したファイルディスクリプタが指定された)。
\81\84ã\81\9aã\82\8cã\81\8bã\81®é\9b\86å\90\88ã\81«ç\84¡å\8a¹ã\81ªã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8cæ\8c\87å®\9aã\81\95ã\82\8cã\81\9f (ã\81\8aã\81\9dã\82\89ã\81\8fã\81¯ã\80\81ã\81\99ã\81§ã\81«ã\82¯ã\83­ã\83¼ã\82ºã\81\95ã\82\8cã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼か、
\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8cæ\8c\87å®\9aã\81\95ã\82\8cã\81\9f\80\82
 .TP 
 \fBEINTR\fP
 シグナルを受信した。
 .TP 
 \fBEINVAL\fP
-\fIn\fP が負、または \fItimeout\fP に入っている値が不正である。
+\fInfds\fP が負、 またはリソース上限 \fBRLIMIT_NOFILE\fP (\fBgetrlimit\fP(2) 参照) より大きい。
+.TP 
+\fBEINVAL\fP
+\fItimeout\fP に入っている値が不正である。
 .TP 
 \fBENOMEM\fP
-内部テーブルにメモリを割り当てることができなかった。
\86\85é\83¨ã\83\86ã\83¼ã\83\96ã\83«ã\81«ã\83¡ã\83¢ã\83ªã\83¼ã\82\92å\89²ã\82\8aå½\93ã\81¦ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81ªã\81\8bã\81£ã\81\9fã\80\82
 .SH バージョン
 \fBpselect\fP()  はカーネル 2.6.16 で Linux に追加された。 それ以前は、 \fBpselect\fP()  は glibc
 でエミュレートされていた (「バグ」の章を参照)。
 .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 注意
-\fIfd_set\fP ã\81¯å\9bºå®\9aã\82µã\82¤ã\82ºã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\81§ã\81\82ã\82\8bã\80\82 è² ã\82\84 \fBFD_SETSIZE\fP ä»¥ä¸\8aã\81®å\80¤ã\82\92æ\8c\81ã\81¤ \fIfd\fP ã\81«å¯¾ã\81\97ã\81¦ \fBFD_CLR\fP()  ã\82\84
-\fBFD_SET\fP()  を実行した場合、 どのような動作をするかは定義されていない。 また、 POSIX では \fIfd\fP
-は有効なファイルディスクリプタでなければならないと規定されている。
+\fIfd_set\fP ã\81¯å\9bºå®\9aã\82µã\82¤ã\82ºã\81®ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81§ã\81\82ã\82\8bã\80\82 è² ã\82\84 \fBFD_SETSIZE\fP ä»¥ä¸\8aã\81®å\80¤ã\82\92æ\8c\81ã\81¤ \fIfd\fP ã\81«å¯¾ã\81\97ã\81¦ \fBFD_CLR\fP()
+や \fBFD_SET\fP()  を実行した場合、 どのような動作をするかは定義されていない。 また、 POSIX では \fIfd\fP
\81¯æ\9c\89å\8a¹ã\81ªã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81§ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\89ã\81ªã\81\84ã\81¨è¦\8få®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\80\82
 
 型宣言に関しては、昔ながらの状況では \fItimeval\fP 構造体の 2 つのフィールドは (上記のように) 両方とも \fIlong\fP
 型であり、構造体は \fI<sys/time.h>\fP で定義されている。 POSIX.1\-2001 の下では、以下のようになっている。
@@ -236,18 +262,18 @@ struct timeval {
 をインクルードすればよい。 POSIX.1\-2001 の環境で \fBselect\fP()  と \fBpselect\fP()  を使いたい場合は、
 \fI<sys/select.h>\fP をインクルードすればよい。
 
-ヘッダファイル \fI<sys/select.h>\fP は libc4 と libc5 にはなく、glibc 2.0 以降に存在する。
-悪いことに glibc 2.0 以前では \fBpselect\fP()  のプロトタイプが間違っている。 glibc 2.1 から 2.2.1 では
-\fB_GNU_SOURCE\fP が定義されている場合に、 \fBpselect\fP()  が提供される。 glibc 2.2.2 以降では、
-\fBpselect\fP()  を使用するには、「書式」に記載された要件を満たす必要がある。
-.SS マルチスレッド・アプリケーション
-\fBselect\fP() で監視中のファイルディスクリプタが別のスレッドでクローズされた場合、どのような結果になるかは規定されていない。いくつかの
-UNIX システムでは、 \fBselect\fP() は停止 (block) せず、すぐ返り、ファイルディスクリプタが ready だと報告される
-(\fBselect\fP() ã\81\8cè¿\94ã\81£ã\81¦ã\81\8bã\82\89 I/O æ\93\8dä½\9cã\81\8cå®\9fè¡\8cã\81\95ã\82\8cã\82\8bã\81¾ã\81§ã\81®é\96\93ã\81«ã\80\81 å\88¥ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\81\8cå\86\8d度ã\82ªã\83¼ã\83\97ã\83³ã\81\95ã\82\8cã\81ªã\81\84é\99\90ã\82\8aã\80\81 ã\81\9dã\82\8c以é\99\8dã\81® I/O
-操作はおそらく失敗するだろう)。 Linux (や他のいくつかのシステム) では、 別のスレッドでファイルディスクリプタがクローズされても
+glibc 2.0 では \fI<sys/select.h>\fP が提供する \fBpselect\fP()  のプロトタイプが間違っている。
+glibc 2.1 から 2.2.1 では \fB_GNU_SOURCE\fP が定義されている場合に、 \fBpselect\fP()  が提供される。
+glibc 2.2.2 以降では、 \fBpselect\fP()  を使用するには、「書式」に記載された要件を満たす必要がある。
+.SS マルチスレッドアプリケーション
+.\"
+\fBselect\fP() ã\81§ç\9b£è¦\96中ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8cå\88¥ã\81®ã\82¹ã\83¬ã\83\83ã\83\89ã\81§ã\82¯ã\83­ã\83¼ã\82ºã\81\95ã\82\8cã\81\9få ´å\90\88ã\80\81ã\81©ã\81®ã\82\88ã\81\86ã\81ªçµ\90æ\9e\9cã\81«ã\81ªã\82\8bã\81\8bã\81¯è¦\8få®\9aã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\80\82ã\81\84ã\81\8fã\81¤ã\81\8bã\81®
+UNIX ã\82·ã\82¹ã\83\86ã\83 ã\81§ã\81¯ã\80\81 \fBselect\fP() ã\81¯å\81\9cæ­¢ (block) ã\81\9bã\81\9aã\80\81ã\81\99ã\81\90è¿\94ã\82\8aã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8c ready ã\81 ã\81¨å ±å\91\8aã\81\95ã\82\8cã\82\8b
+(\fBselect\fP() ã\81\8cè¿\94ã\81£ã\81¦ã\81\8bã\82\89 I/O æ\93\8dä½\9cã\81\8cå®\9fè¡\8cã\81\95ã\82\8cã\82\8bã\81¾ã\81§ã\81®é\96\93ã\81«ã\80\81 å\88¥ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8cå\86\8d度ã\82ªã\83¼ã\83\97ã\83³ã\81\95ã\82\8cã\81ªã\81\84é\99\90ã\82\8aã\80\81 ã\81\9dã\82\8c以é\99\8dã\81®
+I/O 操作はおそらく失敗するだろう)。 Linux (や他のいくつかのシステム) では、 別のスレッドでファイルディスクリプターがクローズされても
 \fBselect\fP() には影響を与えない。
 まとめると、このような場合に特定の動作に依存しているアプリケーションは「バグっている」と考えなければならない。
-.SS "Linux での注意"
+.SS "C ライブラリとカーネル ABI の違い"
 このページで説明している \fBpselect\fP() のインターフェースは、glibc に
 実装されているものである。内部で呼び出される Linux のシステムコールは
 \fBpselect6\fP() という名前である。このシステムコールは glibc のラッパー
@@ -260,21 +286,21 @@ Linux の \fBpselect6\fP() システムコールは \fItimeout\fP 引き数を
 これが POSIX.1\-2001 が要求している動作である。
 
 \fBpselect6\fP() システムコールの最後の引き数は \fIsigset_t\ *\fP 型の
-ポインタではなく、以下に示す構造体である。
\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\81§ã\81¯ã\81ªã\81\8fã\80\81以ä¸\8bã\81«ç¤ºã\81\99æ§\8bé\80 ä½\93ã\81§ã\81\82ã\82\8bã\80\82
 .in +4
 .nf
 
 struct {
-    const sigset_t *ss;     /* シグナル集合へのポインタ */
+    const sigset_t *ss;     /* シグナル集合へのポインタ */
     size_t          ss_len; /* 'ss' が指すオブジェクトのサイズ
                                (バイト数) */
 };
 
 .fi
 .in
-このようにすることで、ほとんどのアーキテクチャがサポートしている
\81\93ã\81®ã\82\88ã\81\86ã\81«ã\81\99ã\82\8bã\81\93ã\81¨ã\81§ã\80\81ã\81»ã\81¨ã\82\93ã\81©ã\81®ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ã\81\8cã\82µã\83\9dã\83¼ã\83\88ã\81\97ã\81¦ã\81\84ã\82\8b
 システムコールの引き数が最大で 6 個という事実を満たしつつ、
-\fBpselect6\fP() システムコールがシグナル集合へのポインタとシグナル集合
+\fBpselect6\fP() ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81\8cã\82·ã\82°ã\83\8aã\83«é\9b\86å\90\88ã\81¸ã\81®ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\81¨ã\82·ã\82°ã\83\8aã\83«é\9b\86å\90\88
 のサイズの両方を取得することができるのである。
 .SH バグ
 glibc 2.0 では、 \fIsigmask\fP 引き数を取らないバージョンの \fBpselect\fP()  が提供されていた。
@@ -286,7 +312,7 @@ glibc 2.0 では、 \fIsigmask\fP 引き数を取らないバージョンの \fB
 
 \fBpselect\fP() がないシステムにおいて、シグナルの捕捉を信頼性があり (移植
 性も高い) 方法で行うには、 自己パイプ (self\-pipe) という技を使うとよい。
-この方法では、シグナルハンドラはパイプへ 1 バイトのデータを書き込み、
\81\93ã\81®æ\96¹æ³\95ã\81§ã\81¯ã\80\81ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81¯ã\83\91ã\82¤ã\83\97ã\81¸ 1 ã\83\90ã\82¤ã\83\88ã\81®ã\83\87ã\83¼ã\82¿ã\82\92æ\9b¸ã\81\8dè¾¼ã\81¿ã\80\81
 同じパイプのもう一端をメインプログラムの \fBselect\fP() で監視する (一杯に
 なったパイプへの書き込みや空のパイプから読み出しを行った際に起こるであ
 ろう停止 (blocking) を避けるためには、パイプへの読み書きの際には 非停止
@@ -295,12 +321,12 @@ glibc 2.0 では、 \fIsigmask\fP 引き数を取らないバージョンの \fB
 .\" Stevens discusses a case where accept can block after select
 .\" returns successfully because of an intervening RST from the client.
 .\" Maybe the kernel should have returned EIO in such a situation?
-Linux では、 \fBselect\fP()  がソケットファイルディスクリプタで "読み込みの準備ができた" と報告した場合でも、 この後で read
+Linux ã\81§ã\81¯ã\80\81 \fBselect\fP()  ã\81\8cã\82½ã\82±ã\83\83ã\83\88ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81§ "読ã\81¿è¾¼ã\81¿ã\81®æº\96å\82\99ã\81\8cã\81§ã\81\8dã\81\9f" ã\81¨å ±å\91\8aã\81\97ã\81\9få ´å\90\88ã\81§ã\82\82ã\80\81 ã\81\93ã\81®å¾\8cã\81§ read
 を行うと停止 (block) することがある。このような状況は、 例えば、データが到着したが、検査でチェックサム異常が見つかり廃棄された時
-などに起こりえる。他にもファイルディスクリプタが準備できたと間違って 報告される状況が起こるかもしれない。
\81ªã\81©ã\81«èµ·ã\81\93ã\82\8aã\81\88ã\82\8bã\80\82ä»\96ã\81«ã\82\82ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8cæº\96å\82\99ã\81§ã\81\8dã\81\9fã\81¨é\96\93é\81\95ã\81£ã\81¦ å ±å\91\8aã\81\95ã\82\8cã\82\8bç\8a¶æ³\81ã\81\8cèµ·ã\81\93ã\82\8bã\81\8bã\82\82ã\81\97ã\82\8cã\81ªã\81\84ã\80\82
 したがって、停止すべきではないソケットに対しては \fBO_NONBLOCK\fP を使うとより安全であろう。
 
-Linux では、 \fBselect\fP()  がシグナルハンドラにより割り込まれた場合 (つまり \fBEINTR\fP エラーが返る場合)、
+Linux ã\81§ã\81¯ã\80\81 \fBselect\fP()  ã\81\8cã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81«ã\82\88ã\82\8aå\89²ã\82\8aè¾¼ã\81¾ã\82\8cã\81\9få ´å\90\88 (ã\81¤ã\81¾ã\82\8a \fBEINTR\fP ã\82¨ã\83©ã\83¼ã\81\8cè¿\94ã\82\8bå ´å\90\88\80\81
 \fItimeout\fP も変更する。 これは POSIX.1\-2001 では認められていない挙動である。 Linux の \fBpselect\fP()
 システムコールも同じ挙動をするが、 glibc のラッパー関数がこの挙動を隠蔽している。 具体的には、glibc のラッパー関数の内部で、
 \fItimeout\fP をローカル変数にコピーし、 このローカル変数をシステムコールに渡している。
@@ -342,11 +368,12 @@ main(void)
 }
 .fi
 .SH 関連項目
-\fBaccept\fP(2), \fBconnect\fP(2), \fBpoll\fP(2), \fBread\fP(2), \fBrecv\fP(2), \fBsend\fP(2),
-\fBsigprocmask\fP(2), \fBwrite\fP(2), \fBepoll\fP(7), \fBtime\fP(7)
+\fBaccept\fP(2), \fBconnect\fP(2), \fBpoll\fP(2), \fBread\fP(2), \fBrecv\fP(2),
+\fBrestart_syscall\fP(2), \fBsend\fP(2), \fBsigprocmask\fP(2), \fBwrite\fP(2),
+\fBepoll\fP(7), \fBtime\fP(7)
 
 考察と使用例の書かれたチュートリアルとして、 \fBselect_tut\fP(2)  がある。
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。