poll(2) FreeBSD 一般コマンドマニュアル

poll

前のページ 上に戻る 次のページ

poll




書式

     #include <sys/types.h>
     #include <poll.h>

     int
     poll(struct pollfd *fds, unsigned int nfds, int timeout);


解説

     poll() はファイル記述子の集合を調査して、それらのいずれかで入出力の準備が
     できているか否かを調べます。 fds 引数は <poll.h> で定義された pollfd 配列
     を指すポインタ (後述) です。 nfds 引数は fds 配列のサイズを決定します。

     struct pollfd {
         int    fd;       /* ファイル記述子 */
         short  events;   /* 検索するイベント */
         short  revents;  /* 返されたイベント */
     };

     pollfd 構造体のフィールドは次のとおりです:

     fd          調査するファイル記述子。もし fd が -1 なら revents はクリアさ
                 れ (0 に設定)、pollfd はチェックされません。

     events      調査するイベント (後述)。

     revents     発生したイベント (後述)。

     eventsrevents 内のビットマスクには次のビットがあります。

     POLLIN         高優先データ以外のデータはブロックせずに読取りできます。

     POLLRDNORM     通常データはブロックせずに読取りできます。

     POLLRDBAND     優先順位が 0 でないデータはブロックせずに読取りできます。

     POLLPRI        高優先データはブロックせずに読取りできます。

     POLLOUT

     POLLWRNORM     通常データはブロックせずに書込みできます。

     POLLWRBAND     優先順位が 0 でないデータはブロックせずに書込みできます。

     POLLERR        デバイスまたはソケット上に例外状態が起きました。このフラグ
                    は、 events ビットマスクに存在していなくても必ずチェックさ
                    れます。

     POLLHUP        デバイスまたはソケットが切断されています。このフラグは、
                    events ビットマスク内に存在しなくても必ずチェックされま
                    す。 POLLHUP と POLLOUT は、 revents ビットマスク内に同時
                    に存在することが決してないことに注意してください。

     せん。


互換性

     この実装は、ファイル記述子によって poll() がエラーにならないという点で、
     過去のものと異なっています。過去の実装においてエラーになるであろう場合 (
     たとえば revoke(2) された記述子を検査しようとした場合)、この実装は代わり
     に events ビットマスクを revents ビットマスクにコピーします。この記述子上
     で入出力を実行しようとするとエラーが返されます。この動作はより便利である
     と考えられています。


エラー

     poll() は次のエラーで戻ります。

     [EFAULT]           fds は、プロセスに割り当てられたアドレス空間の範囲外を
                        指しています。

     [EINTR]            時間切れになる前に、そして選択されたイベントが発生する
                        前にシグナルを受信しました。

     [EINVAL]           時間制限として負の値が指定されました。


関連項目

     accept(2), connect(2), read(2), recv(2), select(2), send(2), write(2)


バグ

     events ビットマスクと revents ビットマスクのいくつかのフィールド間の違い
     は、 STREAMS 以外では実用的ではありません。それらのフィールドは、既存のソ
     フトウェアとの互換性を保つために定義されています。


歴史

     poll() 関数は AT&T System V UNIX で登場しました。このマニュアルページと実
     装の主要な部分は NetBSD から得たものです。

FreeBSD 4.4                    September 7, 1996                   FreeBSD 4.4

ABELNET VPSサービス