POLL(2)

名前
poll - ファイル・ディスクリプターにおけるイベントを待つ

書式
#include <sys/poll.h>

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

説明
poll は select と同じ目的の変種である。これは以下の型の構造体の配列を ufds に指定する。
        struct pollfd {
                int fd;           /* file descriptor */
                short events;     /* requested events */
                short revents;    /* returned events */
        };
そして timeout にミリ秒を指定する。負の値は無制限、タイムアウト無しを意味する。 構造体の fd にはオープンしたファイルのファイル・ディスクリターを入れる。 構造体の events 要素は入力パラメーターで、アプリケーションが興味を持っているイベントの ビットマスクを指定する。 revents 要素は出力パラメーターでカーネルによって実際に起ったイベントが設定され、 要求したイベントのどれかか、 POLLERR, POLLHUP, POLLNVAL のどれかとなる。(これら三っつのビットは events に指定しても意味がない、対応した状態が真の場合に revents に設定される。) どのファイル・ディスクリプターにも要求したイベントが発生しておらず、 エラーも起こらない場合、カーネルは timeout ミリ秒の間、それらのイベントのどれかが発生するのを待つ。 以下のマスクとして使用可能なビットは <sys/poll.h> に定義されている:
    #define POLLIN      0x0001    /* There is data to read */
    #define POLLPRI     0x0002    /* There is urgent data to read */
    #define POLLOUT     0x0004    /* Writing now will not block */
    #define POLLERR     0x0008    /* Error condition */
    #define POLLHUP     0x0010    /* Hung up */
    #define POLLNVAL    0x0020    /* Invalid request: fd not open */
<asm/poll.h> には POLLRDNORM, POLLRDBAND, POLLWRNORM, POLLWRBAND POLLMSG などの値も定義されている。

返り値
成功した場合は正の数を返す、この数はゼロ以外の revents 要素を持つ構造体の数である、(別の言い方をすると、これらのディスクリプター にはイベントかエラー報告がある。) エラーの場合は -1 が返され、 errno が適切に設定される。

エラー

ENOMEM
    ファイル・ディスクリプター・テーブルを確保するためのメモリがない。

EFAULT
    引き数として指定した配列が、呼び出したプロセスのアドレス空間に 含まれていない。

EINTR
    要求されたイベントのどれかが起こる前にシグナルが発生した。

準拠
XPG4-UNIX.

有用性
poll() システムコール Linux 2.1.23 で導入された。 poll() ライブラリ・コールは libc 5.4.28 から導入された (これはカーネルが poll システムコールをサポートしていな場合に select を使用してエミュレートを行う)。

関連項目
select(2)