tail head cat sleep
QR code linking to this page

manページ  — POLL

名称

poll – 同期的な入出力の多重化

内容

ライブラリ

Standard C Library (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 発生したイベント (後述)。

eventsrevents 内のビットマスクには次のビットがあります:
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() はブロックせずに戻ります。

戻り値

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 V で登場しました。 このマニュアルページと実装の主要な部分は NetBSD から得たものです。

POLL (2) July 8, 2002

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

Using Unix is the computing equivalent of listening only to music by David Cassidy
— Rob Pike