OSDN Git Service

Translation snapshot for LDP v3.76
[linuxjm/LDP_man-pages.git] / draft / man2 / poll.2
index 0be7515..3e3bff9 100644 (file)
@@ -47,7 +47,7 @@
 .\" Updated 2012-05-29, Akihiro MOTOKI <amotoki@gmail.com>
 .\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
 .\"
-.TH POLL 2 2013\-09\-04 Linux "Linux Programmer's Manual"
+.TH POLL 2 2014\-09\-06 Linux "Linux Programmer's Manual"
 .SH 名前
 poll, ppoll \- ファイルディスクリプタにおけるイベントを待つ
 .SH 書式
@@ -57,6 +57,7 @@ poll, ppoll \- ファイルディスクリプタにおけるイベントを待
 \fBint poll(struct pollfd *\fP\fIfds\fP\fB, nfds_t \fP\fInfds\fP\fB, int \fP\fItimeout\fP\fB);\fP
 .sp
 \fB#define _GNU_SOURCE\fP         /* feature_test_macros(7) 参照 */
+\fB#include <signal.h>\fP
 \fB#include <poll.h>\fP
 .sp
 \fBint ppoll(struct pollfd *\fP\fIfds\fP\fB, nfds_t \fP\fInfds\fP\fB, \fP
@@ -80,17 +81,14 @@ struct pollfd {
 .PP
 \fInfds\fP には、 \fIfds\fP 配列の要素数を指定する。
 
-\fIfd\fP フィールドには、オープンされたファイルのファイルディスクリプタが入る。
-このフィールドが負の場合、対応する \fIevents\fP フィールドは無視され、
-\fIrevents\fP には 0 が返される。(この機能により、一つの \fBpoll\fP() の呼び出しで
-簡単にあるファイルディスクリプタを無視することができる。
-単に \fIfd\fP フィールドの符号を反転するだけでよい。)
+\fIfd\fP フィールドには、オープンされたファイルのファイルディスクリプタが入る。 このフィールドが負の場合、対応する \fIevents\fP
+フィールドは無視され、 \fIrevents\fP には 0 が返される。(この機能により、一つの \fBpoll\fP()
+の呼び出しで簡単にあるファイルディスクリプタを無視することができる。 単に \fIfd\fP フィールドの符号を反転するだけでよい。
+ただし、この方法はファイルディスクリプタ 0 を無視するのには使用できない点に注意すること。)
 
-構造体の \fIevents\fP 要素は入力パラメータで、
-ファイルディスクリプタ \fIfd\fP に関して、
-アプリケーションが興味を持っているイベントのビットマスクを指定する。
-このフィールドに 0 が指定された場合は、\fIfd\fP の全てのイベントが無視され、
-\fIrevents\fP には 0 が返される。
+構造体の \fIevents\fP 要素は入力パラメータで、 ファイルディスクリプタ \fIfd\fP に関して、
+アプリケーションが興味を持っているイベントのビットマスクを指定する。 このフィールドには 0 を指定することもでき、 その場合 \fIrevents\fP
+で返されるイベントは \fBPOLLHUP\fP, \fBPOLLERR\fP, \fBPOLLNVAL\fP だけである (下記参照)。
 
 \fIrevents\fP 要素は出力パラメータで、実際に起こったイベントがカーネルにより設定される。 \fIrevents\fP で返されるビット列には、
 \fIevents\fP で指定したもののどれか、もしくは \fBPOLLERR\fP, \fBPOLLHUP\fP, \fBPOLLNVAL\fP のうちの一つが含まれる
@@ -100,9 +98,17 @@ struct pollfd {
 どのファイルディスクリプタにも要求したイベントが発生しておらず、 エラーも起こらない場合、 \fBpoll\fP()
 はイベントのうちいずれか一つが発生するまで停止 (block) する。
 
-\fItimeout\fP 引き数は、 ファイルディスクリプタが利用可能になるまで \fBpoll\fP() が停止する時間をミリ秒で指定する。
-この停止時間はシステムクロックの粒度に切り上げられ、 カーネルのスケジューリング遅延により少しだけ長くなる可能性がある。 \fItimeout\fP
-に負の値を指定した場合、タイムアウト時間が無限大を意味する。 \fItimeout\fP を 0 に指定した場合、I/O
+\fItimeout\fP 引き数は、 ファイルディスクリプタが利用可能になるまで \fBpoll\fP() が停止する時間をミリ秒で指定する。 \fBpoll\fP()
+の呼び出しは以下のいずれかになるまで停止する。
+.IP * 3
+ファイルディスクリプタが利用可能になる
+.IP *
+呼び出しがシグナルハンドラーにより割り込まれた
+.IP *
+タイムアウトが満了する
+.PP
+\fItimeout\fP 時間はシステムクロックの粒度に切り上げられ、 カーネルのスケジューリング遅延により少しだけ長くなる可能性がある点に注意すること。
+\fItimeout\fP に負の値を指定した場合、タイムアウト時間が無限大を意味する。 \fItimeout\fP を 0 に指定した場合、I/O
 可能なファイルディスクリプタがない場合であっても、 \fBpoll\fP() はすぐに返る。
 
 \fIevents\fP に指定したり、 \fIrevents\fP で返されるビットは \fI<poll.h>\fP で定義されている:
@@ -116,7 +122,8 @@ struct pollfd {
 データを受信した場合や、 パケットモードの擬似端末のマスタがスレーブ側の変化を見つけたとき)。
 .TP 
 \fBPOLLOUT\fP
-書き込みが停止 (block) しない状態である。
+書き込みが可能になった。ただし、ソケットやパイプで利用可能な空間よりも大きなデータを書き込んだ場合には (\fBO_NONBLOCK\fP
+がセットされている場合以外は) やはり停止することになる。
 .TP 
 \fBPOLLRDHUP\fP (Linux 2.6.17 以降)
 ストリームソケットの他端が、コネクションを close したか、 コネクションの書き込み側を shutdown した。 この定義を有効にするには、
@@ -228,16 +235,20 @@ glibc (や古い Linux libc) は \fBselect\fP(2) を使用して \fBpoll\fP()
 
 \fBpoll\fP() で監視中のファイルディスクリプタが別のスレッドによってクローズされた場合に何が起こるかの議論については、 \fBselect\fP(2)
 を参照してほしい。
-.SS "Linux での注意"
+.SS "C ライブラリとカーネル ABI の違い"
 Linux の \fBppoll\fP()  システムコールは \fItimeout_ts\fP 引き数を変更する。 しかし、glibc
 のラッパー関数は、システムコールに渡す timeout 引き数 としてローカル変数を使うことでこの動作を隠蔽している。 このため、glibc の
 \fBppoll\fP()  関数では \fItimeout_ts\fP 引き数は変更されない。
+
+素の \fBppoll\fP() システムコールは 5 番目の引き数 \fIsize_t sigsetsize\fP をとる。 この引き数は \fIsigmask\fP
+引き数のバイト単位のサイズを指定する。 glibc の \fBppoll\fP() ラッパー関数は、この引き数に固定値
+(\fIsizeof(sigset_t)\fP と同じ) を指定する。
 .SH バグ
 \fBselect\fP(2)  の「バグ」の節に書かれている、誤った準備完了通知 (spurious readiness notifications)
 についての議論を参照のこと。
 .SH 関連項目
 \fBrestart_syscall\fP(2), \fBselect\fP(2), \fBselect_tut\fP(2), \fBtime\fP(7)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.76 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。