-¤³¤Î°ú¤¿ô¤Ï¡¢¸Æ¤Ó½Ð¤·Â¦¤¬
-.BR pselect ()
-ÆâÉô¤ÇÄä»ß¤·¤Æ¤¤¤ë´Ö¤Ë¡¢¥«¡¼¥Í¥ë¤¬ÄÌÃΤòµö²Ä¤¹¤Ù¤¥·¥°¥Ê¥ë½¸¹ç
-(¤¹¤Ê¤ï¤Á¡¢¸Æ¤Ó½Ð¤·¤¿¥¹¥ì¥Ã¥É¤Î¥·¥°¥Ê¥ë¥Þ¥¹¥¯¤«¤éºï½ü¤¹¤Ù¤¥·¥°¥Ê¥ë½¸¹ç)
-¤òÊÝ»ý¤¹¤ë
-.RB ( sigaddset (3)
-¤È
-.BR sigprocmask (2)
-¤ò»²¾È)¡£
-¤³¤Î°ú¤¿ô¤Ï NULL ¤Ë¤¹¤ë¤³¤È¤â¤Ç¤¡¢¤½¤Î¾ì¹ç¤Ï¤³¤Î´Ø¿ô¤Ø
-Æþ¤ë¤È¤¡¦½Ð¤ë¤È¤¤Ë¥·¥°¥Ê¥ë¥Þ¥¹¥¯¤òÊѹ¹¤·¤Ê¤¤¡£
-¤³¤Î¾ì¹ç¡¢
-.BR pselect ()
-¤Ï
-.BR select ()
-¤ÈÁ´¤¯Æ±¤¸Æ°ºî¤È¤Ê¤ë¡£
-.SS ¥·¥°¥Ê¥ë¤È¥Ç¡¼¥¿¥¤¥Ù¥ó¥È¤òÁȤ߹ç¤ï¤»¤ë
-¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ I/O ²Äǽ¤Ê¾õÂ֤ˤʤë¤Î¤ÈƱ»þ¤Ë
-¥·¥°¥Ê¥ë¤âÂÔ¤Á¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢
-.BR pselect ()
-¤¬ÊØÍø¤Ç¤¢¤ë¡£
-¥·¥°¥Ê¥ë¤ò¼õ¿®¤¹¤ë¥×¥í¥°¥é¥à¤Ï¡¢Ä̾ï¤Ï¡¢
-¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ò¥°¥í¡¼¥Ð¥ë¤Ê¥Õ¥é¥°¤òΩ¤Æ¤ë¤¿¤á¤À¤±¤Ë»È¤¦¡£
-¤³¤Î¥°¥í¡¼¥Ð¥ë¤Ê¥Õ¥é¥°¤Ï¡¢
-¤½¤Î¥¤¥Ù¥ó¥È¤ò¥×¥í¥°¥é¥à¤Î¥á¥¤¥ó¥ë¡¼¥×¤Ç
-½èÍý¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤³¤È¤ò¼¨¤¹¡£
-¥·¥°¥Ê¥ë¤ò¼õ¤±¤ë¤È
-.BR select ()
-(¤ä
-.BR pselect ())
-¤Ï
-\fIerrno\fP ¤Ë \fBEINTR\fP ¤ò¥»¥Ã¥È¤·¤ÆÌá¤ë¤³¤È¤Ë¤Ê¤ë¡£
-¥·¥°¥Ê¥ë¤¬¥×¥í¥°¥é¥à¤Î¥á¥¤¥ó¥ë¡¼¥×¤Ç½èÍý¤µ¤ì¤ë¤¿¤á¤Ë¤Ï¤³¤ÎÆ°ºî¤¬ÉԲķç¤Ç¡¢
-¤³¤ì¤¬¤Ê¤¤¤È
-.BR select ()
-¤Ï±Ê±ó¤ËÄä»ß¤·Â³¤±¤ë¤³¤È¤Ë¤Ê¤ë¡£
-¤µ¤Æ¡¢¥á¥¤¥ó¥ë¡¼¥×¤Î¤É¤³¤«¤Ë¤³¤Î¥°¥í¡¼¥Ð¥ë¥Õ¥é¥°¤ò¥Á¥§¥Ã¥¯¤¹¤ë
-¾ò·ïʸ¤¬¤¢¤ë¤È¤·¤è¤¦¡£¤³¤³¤Ç¾¯¤·¹Í¤¨¤Æ¤ß¤Ê¤¤¤È¤¤¤±¤Ê¤¤¡£
-¡Ö¥·¥°¥Ê¥ë¤¬¾ò·ïʸ¤Î¸å¡¢¤·¤«¤·
-.BR select ()
-¥³¡¼¥ë¤ÎÁ°¤ËÅþÃ夷¤¿¤é
-¤É¤¦¤Ê¤ë¤Î¤«¡©¡×
-Åú¤¨¤Ï¡Ö¤½¤Î
-.BR select ()
-¤Ï¡¢¤¿¤È¤¨²ò·èÂÔ¤Á¤Î¥¤¥Ù¥ó¥È¤¬¤¢¤Ã¤¿¤È¤·¤Æ¤â¡¢
-±Ê±ó¤ËÄä»ß¤¹¤ë¡×¤Ç¤¢¤ë¡£
-¤³¤Î¶¥¹ç¾õÂÖ¤Ï
-.BR pselect ()
-¥³¡¼¥ë¤Ë¤è¤Ã¤Æ²ò·è¤Ç¤¤ë¡£
-¤³¤Î¥³¡¼¥ë¤ò»È¤¦¤È¡¢
-.BR pselect ()
-¤Ç¼õ¿®¤·¤¿¤¤¥·¥°¥Ê¥ë¤Î½¸¹ç¤À¤±¤ò¥·¥°¥Ê¥ë¥Þ¥¹¥¯¤ËÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤¤ë¡£
-Î㤨¤Ð¡¢ÌäÂê¤È¤Ê¤Ã¤Æ¤¤¤ë¥¤¥Ù¥ó¥È¤¬»Ò¥×¥í¥»¥¹¤Î½ªÎ»¤Î¾ì¹ç¤ò¹Í¤¨¤è¤¦¡£
-¥á¥¤¥ó¥ë¡¼¥×¤¬»Ï¤Þ¤ëÁ°¤Ë¡¢
-.B SIGCHLD
-¤ò
-.BR sigprocmask (2)
-¤Ç¥Ö¥í¥Ã¥¯¤¹¤ë¡£
-.BR pselect ()
-¥³¡¼¥ë¤Ç¤Ï
-.B SIGCHLD
-¤ò¡¢¤â¤È¤â¤È¤Î¥·¥°¥Ê¥ë¥Þ¥¹¥¯¤ò»È¤Ã¤Æ͸ú¤Ë¤¹¤ë¤Î¤À¡£
-¤³¤Î¥×¥í¥°¥é¥à¤Ï¼¡¤Î¤è¤¦¤Ë¤Ê¤ë¡£
+この引き数は、呼び出し側が \fBpselect\fP() 内部で停止している間に、カーネルが通知を許可すべきシグナル集合
+(すなわち、呼び出したスレッドのシグナルマスクから削除すべきシグナル集合) を保持する (\fBsigaddset\fP(3) と
+\fBsigprocmask\fP(2) を参照)。 この引き数は NULL にすることもでき、その場合はこの関数へ
+入るとき・出るときにシグナルマスクを変更しない。 この場合、 \fBpselect\fP() は \fBselect\fP() と全く同じ動作となる。
+.SS シグナルとデータイベントを組み合わせる
+ファイルディスクリプタが I/O 可能な状態になるのと同時に シグナルも待ちたい場合には、 \fBpselect\fP() が便利である。
+シグナルを受信するプログラムは、通常は、 シグナルハンドラをグローバルなフラグを立てるためだけに使う。 このグローバルなフラグは、
+そのイベントをプログラムのメインループで 処理しなければならないことを示す。 シグナルを受けると \fBselect\fP() (や
+\fBpselect\fP()) は \fIerrno\fP に \fBEINTR\fP をセットして戻ることになる。
+シグナルがプログラムのメインループで処理されるためにはこの動作が不可欠で、 これがないと \fBselect\fP() は永遠に停止し続けることになる。
+さて、メインループのどこかにこのグローバルフラグをチェックする 条件文があるとしよう。ここで少し考えてみないといけない。 「シグナルが条件文の後、しかし
+\fBselect\fP() コールの前に到着したら どうなるのか?」 答えは「その \fBselect\fP()
+は、たとえ解決待ちのイベントがあったとしても、 永遠に停止する」である。 この競合状態は \fBpselect\fP() コールによって解決できる。
+このコールを使うと、 \fBpselect\fP() で受信したいシグナルの集合だけをシグナルマスクに設定することができる。
+例えば、問題となっているイベントが子プロセスの終了の場合を考えよう。 メインループが始まる前に、 \fBSIGCHLD\fP を
+\fBsigprocmask\fP(2) でブロックする。 \fBpselect\fP() コールでは \fBSIGCHLD\fP
+を、もともとのシグナルマスクを使って有効にするのだ。 このプログラムは次のようになる。