"select" --- I/O 完了の待機
***************************

======================================================================

このモジュールでは、ほとんどのオペレーティングシステムで利用可能な
"select()" および "poll()" 関数、Solaris やその派生で利用可能な
"devpoll()" 、Linux 2.5+ で利用可能な "epoll()" 、多くのBSDで利用可能
な "kqueue()" 関数に対するアクセスを提供しています。 Windows 上ではソ
ケットに対してしか動作しないので注意してください; その他のオペレーティ
ングシステムでは、他のファイル形式でも (特に Unixではパイプにも) 動作
します。通常のファイルに対して適用し、最後にファイルを読み出した時から
内容が増えているかを決定するために使うことはできません。

注釈:

  "selectors" モジュールは "select" モジュールのプリミティブを使って、
  高水準で効率的な I/O 多重化を実現します。 OS レベルのプリミティブを
  細かく制御する必要がなければ、代わりに "selectors" モジュールを使う
  ことをお勧めします。

利用可能な環境: not WASI.

このモジュールは WebAssembly では動作しないか、利用不可です。詳しくは
、WebAssembly プラットフォーム を見てください。

このモジュールは以下を定義します:

exception select.error

   "OSError" の非推奨のエイリアスです。

   バージョン 3.3 で変更: **PEP 3151** に基づき、このクラスは
   "OSError" のエイリアスになりました。

select.devpoll()

   "/dev/poll" のポーリングオブジェクトを返します。 devpoll オブジェク
   トが提供するメソッドは、後述の /dev/poll ポーリングオブジェクト 節
   を参照してください。

   "devpoll()" オブジェクトはインスタンス化時に許されるファイル記述子
   の数にリンクされます。プログラムがこの値を減らす場合 "devpoll()" は
   失敗します。プログラムがこの値を増やす場合 "devpoll()" は有効なファ
   イル記述子の不完全なリストを返すことがあります。

   新しいファイル記述子は 継承不可 です。

   Added in version 3.3.

   バージョン 3.4 で変更: 新しいファイル記述子が継承不可になりました。

   利用可能な環境: Solaris.

select.epoll(sizehint=-1, flags=0)

   I/O イベントに対してエッジトリガーまたはレベルトリガーのインターフ
   ェースとして使える、エッジポーリングオブジェクトを返します。

   *sizehint* は、登録を見込むイベント数を epoll に伝えます。 正の値、
   またはデフォルトを使うための "-1" でなければなりません。
   *epoll_create1(2)* が利用できない古いシステムでのみ使われ、それ以外
   では効果がありません (ただし値の検査は行われます)。

   *flags* は非推奨で、完全に無視されます。 ただし指定する場合は "0"
   または "select.EPOLL_CLOEXEC" でなければならず、それ以外では
   "OSError" が送出されます。

   epoll オブジェクトが提供するメソッドについては、後述の エッジトリガ
   ーとレベルトリガーのポーリング (epoll) オブジェクト 節を参照してく
   ださい。

   "epoll" オブジェクトはコンテキストマネジメントプロトコルをサポート
   しています。 "with" 文内で使用された場合、新たなファイル記述子はブ
   ロックの最後で自動的に閉じられます。

   新しいファイル記述子は 継承不可 です。

   バージョン 3.3 で変更: *flags* 引数が追加されました。

   バージョン 3.4 で変更: "with" 文のサポートが追加されました。新しい
   ファイル記述子が継承不可になりました。

   バージョン 3.4 で非推奨: *flags* パラメータ。 現在ではデフォルトで
   "select.EPOLL_CLOEXEC" が使われます。 ファイルディスクリプタを継承
   可能にするには "os.set_inheritable()" を使ってください。

   バージョン 3.15 で変更: CPython のビルド時に "--disable-epoll" を指
   定すると、この関数を無効にできます。

   利用可能な環境: Linux >= 2.5.44.

select.poll()

   ファイル記述子を登録・登録解除し、それらの I/O イベントをポーリング
   できるポーリングオブジェクトを返します。 提供されるメソッドは、後述
   の ポーリングオブジェクト 節を参照してください。

   利用可能な環境: Unix.

select.kqueue()

   カーネルキューオブジェクトを返します。 kqueue オブジェクトが提供す
   るメソッドは、後述の kqueue オブジェクト 節を参照してください。

   新しいファイル記述子は 継承不可 です。

   バージョン 3.4 で変更: 新しいファイル記述子が継承不可になりました。

   利用可能な環境: BSD, macOS.

select.kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)

   カーネルイベントオブジェクトを返します。 kevent オブジェクトが提供
   するメソッドは、後述の kevent オブジェクト 節を参照してください。

   利用可能な環境: BSD, macOS.

select.select(rlist, wlist, xlist, timeout=None)

   Unix の "select()" システムコールへの単純なインターフェースです。
   最初の三つの引数は「待機可能なオブジェクト」のイテラブルです。 各オ
   ブジェクトはファイル記述子を表す整数、または引数なしで呼び出せ、そ
   のような整数を返す "fileno()" メソッドを持つオブジェクトです。

   * *rlist*: 読み込み可能になるまで待機

   * *wlist*: 書き込み可能になるまで待機

   * *xlist*: "例外状態 (exceptional condition)" になるまで待機 ("例外
     状態" については、システムのマニュアルページを参照してください)

   空のイテラブルを渡すこともできますが、三つとも空にできるかどうかは
   プラットフォームに依存します (Unix では動作し、Windows では動作しな
   いことが知られています)。 省略可能な *timeout* 引数はタイムアウトを
   秒単位で指定します。 秒未満の時間を指定するため、整数以外の値も使え
   ます。 *timeout* 引数を省略するか "None" にすると、少なくとも一つの
   ファイル記述子が準備完了になるまでブロックします。 ゼロを指定すると
   ポーリングを行い、ブロックしません。

   戻り値は準備完了状態のオブジェクトからなる 3 つのリストです: したが
   ってこのリストはそれぞれ関数の最初の 3 つの引数のサブセットになりま
   す。ファイル記述子のいずれも準備完了にならないままタイムアウトした
   場合、3 つの空のリストが返されます。

   イテラブルの中に含めることのできるオブジェクトは Python *ファイルオ
   ブジェクト* (例えば "sys.stdin" や、 "open()" または "os.popen()"
   が返すオブジェクト)、 "socket.socket()" が返すソケットオブジェクト
   です。 *ラッパー <wrapper>* クラスを自分で定義することもできます。
   この場合、適切な (まったくデタラメな数ではなく本物のファイル記述子
   を返す) "fileno()" メソッドを持つ必要があります。

   注釈:

     Windows ではファイルオブジェクトを使えませんが、ソケットは使えま
     す。 Windows では基盤となる "select()" 関数が WinSock ライブラリ
     によって提供され、WinSock 以外に由来するファイル記述子を扱えませ
     ん。

   バージョン 3.5 で変更: この関数は、シグナルによって中断された時に、
   "InterruptedError" を上げる代わりに再計算されたタイムアウトによって
   リトライするようになりました。ただし、シグナルハンドラが例外を起こ
   した場合を除きます (この論理的根拠については **PEP 475** を見てくだ
   さい)。

   バージョン 3.15 で変更: *timeout* に、整数や浮動小数点数だけでなく
   任意の実数を渡せるようになりました。

select.PIPE_BUF

   "select()"、"poll()"、またはこのモジュールの他のインターフェースが
   パイプを書き込み可能と報告したときに、ブロックせずに書き込めるバイ
   ト数の下限です。 ソケットなど他の種類のファイルに似たオブジェクトに
   は適用されません。

   この値は POSIX により少なくとも512であることが保証されています。

   利用可能な環境: Unix

   Added in version 3.2.


"/dev/poll" ポーリングオブジェクト
==================================

Solaris とその派生システムには "/dev/poll" があります。 "select()" の
計算量は *O*(*最大のファイル記述子*)、"poll()" は *O*(*ファイル記述子
の数*) ですが、"/dev/poll" は *O*(*アクティブなファイル記述子の数*) で
す。

"/dev/poll" の動作は標準の "poll()" オブジェクトによく似ています。

devpoll.close()

   ポーリングオブジェクトのファイル記述子を閉じます。

   Added in version 3.4.

devpoll.closed

   ポーリングオブジェクトが閉じている場合 "True" です。

   Added in version 3.4.

devpoll.fileno()

   ポーリングオブジェクトのファイル記述子番号を返します。

   Added in version 3.4.

devpoll.register(fd[, eventmask])

   ファイル記述子をポーリングオブジェクトに登録します。これ以降の
   "poll()" メソッド呼び出しでは、そのファイル記述子に処理待ち中の I/O
   イベントがあるかどうかを監視します。 *fd* は整数か、整数値を返す
   "fileno()" メソッドを持つオブジェクトを取ります。ファイルオブジェク
   トも "fileno()" を実装しているので、引数として使うことができます。

   *eventmask* は監視するイベントの種類を表す省略可能なビットマスクで
   す。 定数は "poll()" オブジェクトと同じです。 デフォルト値は
   "POLLIN"、"POLLPRI"、"POLLOUT" の組み合わせです。

   警告:

     登録済みのファイル記述子を再び登録してもエラーにはなりませんが、
     結果は未定義です。 先に登録解除するか、変更するのが適切です。 こ
     れは "poll()" との重要な違いです。

devpoll.modify(fd[, eventmask])

   このメソッドは "unregister()" に続いて "register()" を行います。 同
   じ操作を明示的に行うより (少し) 効率的です。

devpoll.unregister(fd)

   ポーリングオブジェクトによって追跡中のファイル記述子を登録解除しま
   す。 "register()" メソッドと同様に、 *fd* は整数か、整数値を返す
   "fileno()" メソッドを持つオブジェクトを取ります。

   登録されていないファイル記述子の削除を試みるのは安全に無視されます
   。

devpoll.poll([timeout])

   登録されたファイル記述子に対してポーリングを行い、報告すべき I/O イ
   ベントまたはエラーの発生したファイル記述子毎に 2 要素のタプル "(fd,
   event)" からなるリストを返します。 リストは空になることもあります。
   *fd* はファイル記述子です。 *event* は、そのファイル記述子のイベン
   トを表すビットマスクです。 例えば "POLLIN" は読み込み可能な入力があ
   ること、"POLLOUT" は書き込みが可能なことを示します。 空のリストは報
   告すべきイベントがどのファイル記述子でも発生しないまま、呼び出しが
   タイムアウトしたことを示します。 *timeout* が与えられた場合、処理を
   戻すまで待機する時間の長さをミリ秒単位で指定します。 *timeout* が省
   略されたり、 -1 であったり、あるいは "None" の場合、そのポーリング
   オブジェクトが監視している何らかのイベントが発生するまでブロックし
   ます。

   バージョン 3.5 で変更: この関数は、シグナルによって中断された時に、
   "InterruptedError" を上げる代わりに再計算されたタイムアウトによって
   リトライするようになりました。ただし、シグナルハンドラが例外を起こ
   した場合を除きます (この論理的根拠については **PEP 475** を見てくだ
   さい)。

   バージョン 3.15 で変更: *timeout* に、整数や浮動小数点数だけでなく
   任意の実数を渡せるようになりました。


エッジトリガーとレベルトリガーのポーリング (epoll) オブジェクト
===============================================================

   https://linux.die.net/man/4/epoll

   *eventmask* は以下の定数を使うビットマスクです。

   +---------------------------+--------------------------------------------------+
   | 定数                      | 意味                                             |
   |===========================|==================================================|
   | "EPOLLIN"                 | 読み込み可能。                                   |
   +---------------------------+--------------------------------------------------+
   | "EPOLLOUT"                | 書き込み可能。                                   |
   +---------------------------+--------------------------------------------------+
   | "EPOLLPRI"                | 読み込み可能な緊急データがある。                 |
   +---------------------------+--------------------------------------------------+
   | "EPOLLERR"                | 対応するファイル記述子でエラーが発生した。       |
   +---------------------------+--------------------------------------------------+
   | "EPOLLHUP"                | 対応するファイル記述子でハングアップが発生した。 |
   +---------------------------+--------------------------------------------------+
   | "EPOLLET"                 | エッジトリガーの動作に設定する。 デフォルトはレ  |
   |                           | ベルトリガー。                                   |
   +---------------------------+--------------------------------------------------+
   | "EPOLLONESHOT"            | 一度だけ通知する動作に設定する。 一つのイベント  |
   |                           | を取り出すと、そのフ ァイル記述子は内部で無効に  |
   |                           | なる。                                           |
   +---------------------------+--------------------------------------------------+
   | "EPOLLEXCLUSIVE"          | 対応するファイル記述子でイベントが発生したときに |
   |                           | 、一つの epoll オブ ジェクトだけの待機を解除しま |
   |                           | す。 デフォルトでは (このフラグを設定し ない場合 |
   |                           | )、そのファイル記述子をポーリングしているすべて  |
   |                           | の epoll オ ブジェクトの待機を解除します。       |
   +---------------------------+--------------------------------------------------+
   | "EPOLLRDHUP"              | ストリームソケットの他端が接続を切断したか、接続 |
   |                           | の書き込み側のシャ ットダウンを行った。          |
   +---------------------------+--------------------------------------------------+
   | "EPOLLRDNORM"             | "EPOLLIN" と同じ                                 |
   +---------------------------+--------------------------------------------------+
   | "EPOLLRDBAND"             | 優先データバンドを読み込める。                   |
   +---------------------------+--------------------------------------------------+
   | "EPOLLWRNORM"             | "EPOLLOUT" と同じ。                              |
   +---------------------------+--------------------------------------------------+
   | "EPOLLWRBAND"             | 優先データに書き込みできる。                     |
   +---------------------------+--------------------------------------------------+
   | "EPOLLMSG"                | 無視される。                                     |
   +---------------------------+--------------------------------------------------+
   | "EPOLLWAKEUP"             | イベントの待機中にスリープするのを防ぐ。         |
   +---------------------------+--------------------------------------------------+

   Added in version 3.6: "EPOLLEXCLUSIVE" が追加されました。 Linux カ
   ーネル 4.5 以降でのみ利用できます。

   Added in version 3.14: "EPOLLWAKEUP" が追加されました。 Linux カー
   ネル 3.5 以降でのみ利用できます。

epoll.close()

   epoll オブジェクトの制御用ファイル記述子を閉じます。

epoll.closed

   epoll オブジェクトが閉じている場合 True です。

epoll.fileno()

   制御用ファイル記述子の番号を返します。

epoll.fromfd(fd)

   *fd* から epoll オブジェクトを作成します。

epoll.register(fd[, eventmask])

   ファイル記述子 *fd* を epoll オブジェクトに登録します。

epoll.modify(fd, eventmask)

   登録済みのファイル記述子 *fd* を変更します。

epoll.unregister(fd)

   epoll オブジェクトから登録されたファイル記述子 *fd* を削除します。

   バージョン 3.9 で変更: このメソッドは "EBADF" エラーを無視しなくな
   りました。

epoll.poll(timeout=None, maxevents=-1)

   イベントを待機します。 *timeout* を指定すると、戻るまでにイベントを
   待機する時間を秒単位で設定します (整数以外も指定できます)。

   バージョン 3.5 で変更: この関数は、シグナルによって中断された時に、
   "InterruptedError" を上げる代わりに再計算されたタイムアウトによって
   リトライするようになりました。ただし、シグナルハンドラが例外を起こ
   した場合を除きます (この論理的根拠については **PEP 475** を見てくだ
   さい)。

   バージョン 3.15 で変更: *timeout* に、整数や浮動小数点数だけでなく
   任意の実数を渡せるようになりました。


ポーリングオブジェクト
======================

ほとんどの Unix システムで利用できる "poll()" システムコールは、非常に
多数のクライアントに同時にサービスを提供するネットワークサーバーで、よ
り優れたスケーラビリティを発揮します。 "poll()" は対象のファイル記述子
を列挙するだけで済みますが、"select()" はビットマップを構築して対象の
ファイル記述子のビットを立て、後でビットマップ全体を再び線形に走査する
必要があるためです。 "select()" の計算量は *O*(*最大のファイル記述子*)
ですが、"poll()" は *O*(*ファイル記述子の数*) です。

poll.register(fd[, eventmask])

   ファイル記述子をポーリングオブジェクトに登録します。これ以降の
   "poll()" メソッド呼び出しでは、そのファイル記述子に処理待ち中の I/O
   イベントがあるかどうかを監視します。 *fd* は整数か、整数値を返す
   "fileno()" メソッドを持つオブジェクトを取ります。ファイルオブジェク
   トも "fileno()" を実装しているので、引数として使うことができます。

   *eventmask* はオプションのビットマスクで、どの種類の I/O イベントを
   監視したいかを記述します。この値は以下の表で述べる定数 "POLLIN" 、
   "POLLPRI" 、および "POLLOUT" の組み合わせにすることができます。ビッ
   トマスクを指定しない場合、標準の値が使われ、 3 種類のイベント全てに
   対して監視が行われます。

   +---------------------+---------------------------------------------+
   | 定数                | 意味                                        |
   |=====================|=============================================|
   | "POLLIN"            | 読み込むデータがある。                      |
   +---------------------+---------------------------------------------+
   | "POLLPRI"           | 読み込む緊急データがある。                  |
   +---------------------+---------------------------------------------+
   | "POLLOUT"           | 出力の準備ができており、書き込みはブロック  |
   |                     | しない。                                    |
   +---------------------+---------------------------------------------+
   | "POLLERR"           | 何らかのエラー状態。                        |
   +---------------------+---------------------------------------------+
   | "POLLHUP"           | ハングアップした。                          |
   +---------------------+---------------------------------------------+
   | "POLLRDHUP"         | ストリームソケットの相手側が接続を閉じたか  |
   |                     | 、接続の書き込み側をシャ ットダウンした。   |
   +---------------------+---------------------------------------------+
   | "POLLNVAL"          | 無効な要求: ファイル記述子が開かれていない  |
   |                     | 。                                          |
   +---------------------+---------------------------------------------+

   登録済みのファイル記述子を登録してもエラーにはならず、一度だけ登録
   した場合と同じ効果になります。

poll.modify(fd, eventmask)

   登録されているファイル記述子 *fd* を変更する。これは、
   "register(fd, eventmask)" と同じ効果を持ちます。登録されていないフ
   ァイル記述子に対してこのメソッドを呼び出すと、 errno "ENOENT" で
   "OSError" 例外が発生します。

poll.unregister(fd)

   ポーリングオブジェクトによって追跡中のファイル記述子を登録解除しま
   す。 "register()" メソッドと同様に、 *fd* は整数か、整数値を返す
   "fileno()" メソッドを持つオブジェクトを取ります。

   登録されていないファイル記述子を登録解除しようとすると "KeyError"
   例外が送出されます。

poll.poll([timeout])

   登録されたファイル記述子に対してポーリングを行い、報告すべき I/O イ
   ベントまたはエラーの発生したファイル記述子毎に 2 要素のタプル "(fd,
   event)" からなるリストを返します。 リストは空になることもあります。
   *fd* はファイル記述子です。 *event* は、そのファイル記述子のイベン
   トを表すビットマスクです。 例えば "POLLIN" は読み込み可能な入力があ
   ること、"POLLOUT" は書き込みが可能なことを示します。 空のリストは報
   告すべきイベントがどのファイル記述子でも発生しないまま、呼び出しが
   タイムアウトしたことを示します。 *timeout* が与えられた場合、処理を
   戻すまで待機する時間の長さをミリ秒単位で指定します。 *timeout* が省
   略されたり、負の値であったり、あるいは "None" の場合、そのポーリン
   グオブジェクトが監視している何らかのイベントが発生するまでブロック
   します。

   バージョン 3.5 で変更: この関数は、シグナルによって中断された時に、
   "InterruptedError" を上げる代わりに再計算されたタイムアウトによって
   リトライするようになりました。ただし、シグナルハンドラが例外を起こ
   した場合を除きます (この論理的根拠については **PEP 475** を見てくだ
   さい)。

   バージョン 3.15 で変更: *timeout* に、整数や浮動小数点数だけでなく
   任意の実数を渡せるようになりました。 "ppoll()" 関数を利用できる場合
   、*timeout* の分解能は "1" ms ではなく "1" ns ("1e-6" ms) です。


kqueue オブジェクト
===================

kqueue.close()

   kqueue オブジェクトの制御用ファイル記述子を閉じる。

kqueue.closed

   kqueue オブジェクトが閉じている場合 "True" です。

kqueue.fileno()

   制御用ファイル記述子の番号を返します。

kqueue.fromfd(fd)

   与えられたファイル記述子から、kqueue オブジェクトを作成する。

kqueue.control(changelist, max_events[, timeout]) -> eventlist

   kevent に対する低水準のインターフェース

   * *changelist* は kevent オブジェクトのイテラブルまたは "None"

   * *max_events* は 0 または正の整数

   * "timeout" は秒単位 (整数以外も可) で、デフォルトの "None" では無
     期限に待機する

   バージョン 3.5 で変更: この関数は、シグナルによって中断された時に、
   "InterruptedError" を上げる代わりに再計算されたタイムアウトによって
   リトライするようになりました。ただし、シグナルハンドラが例外を起こ
   した場合を除きます (この論理的根拠については **PEP 475** を見てくだ
   さい)。

   バージョン 3.15 で変更: *timeout* に、整数や浮動小数点数だけでなく
   任意の実数を渡せるようになりました。


kevent オブジェクト
===================

https://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2

kevent.ident

   イベントを特定するための値。この値は、フィルタにもよりますが、大抵
   の場合はファイル記述子です。コンストラクタでは、 ident として、整数
   値か "fileno()" メソッドを持ったオブジェクトを渡せます。 kevent は
   内部で整数値を保存します。

kevent.filter

   カーネルフィルタの名前。

   +-----------------------------+-----------------------------------------------+
   | 定数                        | 意味                                          |
   |=============================|===============================================|
   | "KQ_FILTER_READ"            | ファイル記述子を受け取り、読み込み可能なデー  |
   |                             | タがあるときに返る。                          |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_WRITE"           | ファイル記述子を受け取り、データを書き込める  |
   |                             | ときに返る。                                  |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_AIO"             | 非同期 I/O 要求。                             |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_VNODE"           | Returns when one or more of the requested     |
   |                             | events watched in *fflags* occurs.            |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_PROC"            | プロセス ID に対するイベントを監視する。      |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_NETDEV"          | ネットワークデバイスに対するイベントを監視す  |
   |                             | る (macOS では利用不可) 。                    |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_SIGNAL"          | 監視しているシグナルがプロセスに届くと返る。  |
   +-----------------------------+-----------------------------------------------+
   | "KQ_FILTER_TIMER"           | 任意のタイマーを設定する。                    |
   +-----------------------------+-----------------------------------------------+

kevent.flags

   フィルタアクション。

   +-----------------------------+------------------------------------------------+
   | 定数                        | 意味                                           |
   |=============================|================================================|
   | "KQ_EV_ADD"                 | イベントを追加または変更する。                 |
   +-----------------------------+------------------------------------------------+
   | "KQ_EV_DELETE"              | キューからイベントを削除する。                 |
   +-----------------------------+------------------------------------------------+
   | "KQ_EV_ENABLE"              | control() がイベントを返すことを許可する。     |
   +-----------------------------+------------------------------------------------+
   | "KQ_EV_DISABLE"             | イベントを無効にする。                         |
   +-----------------------------+------------------------------------------------+
   | "KQ_EV_ONESHOT"             | 最初の発生後にイベントを削除する。             |
   +-----------------------------+------------------------------------------------+
   | "KQ_EV_CLEAR"               | イベントの取得後に状態をリセットする。         |
   +-----------------------------+------------------------------------------------+
   | "KQ_EV_SYSFLAGS"            | 内部イベント。                                 |
   +-----------------------------+------------------------------------------------+
   | "KQ_EV_FLAG1"               | 内部イベント。                                 |
   +-----------------------------+------------------------------------------------+
   | "KQ_EV_EOF"                 | フィルター固有の EOF 状態。                    |
   +-----------------------------+------------------------------------------------+
   | "KQ_EV_ERROR"               | 戻り値を参照。                                 |
   +-----------------------------+------------------------------------------------+

kevent.fflags

   フィルター固有のフラグ。

   "KQ_FILTER_READ" と "KQ_FILTER_WRITE" フィルタのフラグ:

   +------------------------------+----------------------------------------------+
   | 定数                         | 意味                                         |
   |==============================|==============================================|
   | "KQ_NOTE_LOWAT"              | ソケットバッファの低水位標 (low water mark)  |
   |                              | 。                                           |
   +------------------------------+----------------------------------------------+

   "KQ_FILTER_VNODE" フィルタのフラグ:

   +------------------------------+----------------------------------------------+
   | 定数                         | 意味                                         |
   |==============================|==============================================|
   | "KQ_NOTE_DELETE"             | *unlink()* が呼び出された。                  |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_WRITE"              | 書き込みが発生した。                         |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_EXTEND"             | ファイルが拡張された。                       |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_ATTRIB"             | 属性が変更された。                           |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_LINK"               | リンク数が変わった。                         |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_RENAME"             | ファイル名が変更された。                     |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_REVOKE"             | ファイルへのアクセスが取り消された。         |
   +------------------------------+----------------------------------------------+

   "KQ_FILTER_PROC" フィルタフラグ:

   +------------------------------+----------------------------------------------+
   | 定数                         | 意味                                         |
   |==============================|==============================================|
   | "KQ_NOTE_EXIT"               | プロセスが終了した。                         |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_FORK"               | プロセスが *fork()* を呼び出した。           |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_EXEC"               | プロセスが新しいプロセスを実行した。         |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_PCTRLMASK"          | 内部フィルターフラグ。                       |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_PDATAMASK"          | 内部フィルターフラグ。                       |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_TRACK"              | *fork()* 後もプロセスを追跡する。            |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_CHILD"              | *NOTE_TRACK* に対して子プロセスで返される。  |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_TRACKERR"           | 子プロセスに接続できない。                   |
   +------------------------------+----------------------------------------------+

   "KQ_FILTER_NETDEV" フィルタフラグ (macOS では利用不可):

   +------------------------------+----------------------------------------------+
   | 定数                         | 意味                                         |
   |==============================|==============================================|
   | "KQ_NOTE_LINKUP"             | リンクが有効。                               |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_LINKDOWN"           | リンクが無効。                               |
   +------------------------------+----------------------------------------------+
   | "KQ_NOTE_LINKINV"            | リンクの状態が不正。                         |
   +------------------------------+----------------------------------------------+

kevent.data

   フィルター固有のデータ。

kevent.udata

   ユーザー定義の値。
