日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
POLL(2) FreeBSD システムコールマニュアル POLL(2)
名称
poll -- 同期 I/O の多重化
ライブラリ
標準 C ライブラリ (libc, -lc)
書式
#include <poll.h>
int
poll(struct pollfd fds[], nfds_t nfds, int timeout);
int
ppoll(struct pollfd fds[], nfds_t nfds,
const struct timespec * restrict timeout,
const sigset_t * restrict newsigmask);
解説
poll() システムコールは、それらのいくつかが I/O の準備ができているかどう
か確かめるために、1 組のファイル記述子を検査します。fds 引数は、(以下に表
示される) <poll.h> に定義されるような pollfd 構造体の配列へのポインタで
す。nfds 引数は、fds 配列のサイズを決定します。
struct pollfd {
int fd; /* ファイル記述子 */
short events; /* 検索するイベント */
short revents; /* 返されるイベント */
};
struct pollfd のフィールドは、次の通りです:
fd poll へのファイル記述子。fd が -1 に等しいなら、revents は、
クリアされ (0 に設定)、その pollfd は、チェックされません。
events poll するイベント。(以下を参照。)
revents 発生するイベント。(以下を参照。)
events と revents のイベントのビットマスクには、次のビットがあります:
POLLIN 高い優先度のデータ以外のデータは、ブロッキングなしで読み込
まれます。
POLLRDNORM 通常のデータは、ブロッキングなしで読み込まれます。
POLLRDBAND 0 でない優先度があるデータは、ブロッキングなしで読み込まれ
ます。
POLLPRI 高い優先度のデータは、ブロッキングなしで読み込まれます。
POLLOUT
POLLWRNORM 通常のデータは、ブロッキングなしで書き込まれます。
POLLWRBAND 0 でない優先度があるデータは、ブロッキングなしで書き込まれ
ます。
POLLERR 例外的な条件が、デバイスまたはソケットで生じました。このフ
ラグは、たとえ、events のビットマスクがなくても、常に
チェックされます。
POLLHUP デバイスまたはソケットが切断されています。このフラグは、
events のビットマスクになくても、常にチェックされます。
POLLHUP と POLLOUT は、revents のビットマスクが決して同時
に存在するべきでないことに注意してください。
POLLRDHUP リモートの通信空いてが接続をクローズしたか、または書き込み
をシャットダウンしました。POLLHUP とは異なり、POLLRDHUP
は、報告される events のビットマスクに存在しなければなりま
せん。ストリームソケットにのみ適用されます。
POLLNVAL ファイル記述子が、オープンされていないか、または、ケーパビ
リティモードのファイル記述子に、十分な権利がありません。こ
のフラグは、たとえ events のビットマスクになくても、常に
チェックされます。
timeout が 0 でも INFTIM (-1) でもないなら、それは、ミリ秒単位で、あらゆ
るファイル記述子が準備ができるまで待つために、最大の間隔を指定します。
timeout が INFTIM(-1) であるなら、poll は、無期限にブロックします。
timeout が 0 であるなら、poll() は、ブロッキングなしで返ります。
ppoll() システムコールは、poll() と異なり、1 組のファイル記述子が準備がで
きているようになるまで、またはシグナルが捕獲されるまで、安全にウェート
(待つ) するために使用されます。fds と nfds 引数は、poll() の類似した引数
と同一です。ppoll() の timeout 引数は、poll() によって使用される int
timeout ではなく (以下に表示されている) <sys/timespec.h> に定義されている
const struct timespec を指します。NULL ポインタは、ppoll() が無制限に待つ
べきであることを示すために渡されます。最後に、newsigmask は、入力を待つ間
に設定されるシグナルマスクを指定します。ppoll() が返るとき、オリジナルの
シグナルマスクが復旧されます。
struct timespec {
time_t tv_sec; /* 秒 */
long tv_nsec; /* とナノ秒 */
};
戻り値
poll() システムコールは、I/O の準備ができている記述子の数を返し、エラーが
生じたなら、-1 を返します。時間制限の起源が切れるなら、poll() は、0 を返
します。poll() が割り込まれたシステムコールのためのものを含めて、エラーで
返るなら、fds 配列は、修正されません。
互換性
この実装は、与えられたファイル記述子によって poll() がエラーで返らない点
において、歴史的なものと異なります。これが、(例えば、revoke(2) された記述
子を poll することを試みる) 歴史的な実装で起こっていた場合に、この実装
は、その代りに、events のビットマスクを revents のビットマスクにコピーし
ます。次に、この記述子で I/O の実行を試みることは、エラーを返します。この
振る舞いは、より役に立つと考えられます。
エラー
poll() から返るエラーは、次を示します:
[EFAULT] fds 引数が、プロセスの割り付けられたアドレス空間の外側
を指しています。
[EINTR] 時間制限の期限が切れる前に、選択されたイベントのいずれ
かが起こる前に、シグナルが配信されました。
[EINVAL] 指定された時間の制限が無効です。その構成要素の 1 つ
が、負または大きすぎます。
[EINVAL] nfds によって指定された pollfd 構造体の数は、システム
調整変数 kern.maxfilesperproc と FD_SETSIZE を越えてい
ます。
関連項目
accept(2), connect(2), kqueue(2), pselect(2), read(2), recv(2),
select(2), send(2), write(2)
規格
poll() 関数は、IEEE Std 1003.1-2001 (``POSIX.1'') に適合しています。
ppoll() は、POSIX によって明記されていません。POLLRDHUP フラグは、POSIX
によって明記されていませんが、Linux と illumos との互換性があります。
歴史
poll() 関数は、AT&T System V UNIX で登場しました。このマニュアルページと
実装の中核は、NetBSD から受け継がれました。ppoll() 関数は、FreeBSD 11.0
ではじめて登場しました。
バグ
events と revents のビットマスクのフィールドのうちのいくつかの違いは、実
際に STREAMS なしで役に立ちません。フィールドは、既存のソフトウェアとの互
換性のために定義されています。
FreeBSD 13.2 April 27, 2021 FreeBSD 13.2