poll()
システムコールはファイル記述子の集合を調査して、
それらのいずれかで入出力の準備ができているか否かを調べます。
fds
引数は
<poll.h>
で定義された pollfd 配列を指すポインタ (後述) です。
nfds
引数は
fds
配列のサイズを決定します。
struct pollfd {
int fd; /* ファイル記述子 */
short events; /* 検索するイベント */
short revents; /* 返されたイベント */
};
struct, pollfd
のフィールドは次のとおりです:
fd
|
調査するファイル記述子。
もし fd が -1 なら
revents
はクリアされ (0 に設定)、pollfd はチェックされません。
|
events
|
調査するイベント (後述)。
|
revents
|
発生したイベント (後述)。
|
events
と
revents
内のビットマスクには次のビットがあります:
POLLIN
|
高優先データ以外のデータはブロックせずに読取りできます。
|
POLLRDNORM
|
通常データはブロックせずに読取りできます。
|
POLLRDBAND
|
優先順位が 0 でないデータはブロックせずに読取りできます。
|
POLLPRI
|
高優先データはブロックせずに読取りできます。
|
POLLOUT
POLLWRNORM
|
|
通常データはブロックせずに書き込めます。
|
POLLWRBAND
|
優先順位が 0 でないデータはブロックせずに書き込めます。
|
POLLERR
|
デバイスまたはソケット上に例外状態が起きました。
このフラグは、
events
ビットマスクに存在していなくても必ずチェックされます。
|
POLLHUP
|
デバイスまたはソケットが切断されています。
このフラグは、
events
ビットマスク内に存在しなくても必ずチェックされます。
POLLHUP
と
POLLOUT
は、
revents
ビットマスク内に同時に存在することが決してないことに注意してください。
|
POLLNVAL
|
ファイル記述子がオープンされていません。
このフラグは、
events
ビットマスク内に存在しなくても必ずチェックされます。
|
timeout
が 0 でも INFTIM (-1) でもない場合、この値はいずれかのファイル記述子が
準備完了になるのを待機する最大間隔 (ミリ秒単位) です。
timeout
が INFTIM (-1) の場合、
poll()
は無期限にブロックします。
timeout
が 0 の場合
poll()
はブロックせずに戻ります。