POLL(2) FreeBSD システムコールマニュアル POLL(2)
名称
poll − 同期的な入出力の多重化 |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <poll.h> int |
poll(struct pollfd fds[], nfds_t nfds, int timeout); |
解説 |
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 POLLPRI POLLOUT POLLWRNORM POLLWRBAND POLLERR POLLHUP POLLNVAL timeout が 0 でも INFTIM (-1) でもない場合、この値はいずれかのファイル記 述子が準備完了になるのを待機する最大間隔 (ミリ秒単位) です。 timeout が INFTIM (-1) の場合、 poll() は無期限にブロックします。 timeout が 0 の場 合 poll() はブロックせずに戻ります。 戻り値 |
poll() システムコールは入出力の準備が完了した記述子の番号を返します。エ ラーが起きた場合は -1 を返します。時間切れになると poll() は 0 を返しま す。システムコールが割り込まれたことによるエラーも含めて poll() がエラー で戻った場合、 fds 配列は変更されません。 |
互換性
この実装は、ファイル記述子によって poll() がエラーにならないという点で、 過去のものと異なっています。過去の実装においてエラーになるであろう場合 ( たとえば revoke(2) された記述子を検査しようとした場合)、この実装は代わり に events ビットマスクを revents ビットマスクにコピーします。この記述子上 で入出力を実行しようとするとエラーが返されます。この動作はより便利である と考えられています。 |
エラー
poll() は次のエラーで戻ります: |
[EFAULT]
fds 引数は、プロセスに割り当てられたアドレス空間の範囲 外を指しています。 [EINTR] [EINVAL] 関連項目 |
accept(2), connect(2), kqueue(2), read(2), recv(2), select(2), send(2), write(2) |
バグ
events ビットマスクと revents ビットマスクのいくつかのフィールド間の違い は、 STREAMS 以外では実用的ではありません。それらのフィールドは、既存のソ フトウェアとの互換性を保つために定義されています。 |
歴史
poll() 関数は AT&T System V UNIX で登場しました。このマニュアルページと実 装の主要な部分は NetBSD から得たものです。 FreeBSD 10.0 July 8, 2002 FreeBSD 10.0 |