kevents を作成した一連のファイル記述子のリストがあり、読み取りまたは書き込みアクセスの準備ができているそれらの数を取得する方法があるかどうかを調べようとしています。
epoll_wait が提供するような、「準備が整った」ファイル記述子のリストを取得する方法はありますか?
発生したイベントはeventlist
、呼び出しに渡されたバッファーに配置されkevent
ます。したがって、このバッファを十分に大きくすると、探しているリストが得られます。呼び出しの戻り値は、kevent
多くのイベントがeventlist
バッファーにあることを示します。
何らかの理由で大きなバッファーを使用できない場合は、kevent
イベントリストにイベントがゼロになるまで、タイムアウトがゼロでバッファーが小さいループ呼び出しをいつでも実行できます。
もう少し文脈を与えるために...
kevent() で予想されるシナリオの 1 つは、それにプール呼び出しをスレッド化することです。3 つのスレッド プールがすべて 4 つのイベントを要求している場合、OS は実際のイベントを適切にプールしてディスパッチできるようにしたいと考えています。
7 つのイベントが利用可能な場合、OS は 3 つのスレッドにディスパッチするか、コアが空でオーバーヘッドが少ないと OS が判断した場合、3 つのスレッドすべてにディスパッチする必要があります。
あなたのシナリオがまったく無効だと言っているわけではありません。システムは多かれ少なかれ、その情報をあなたから遠ざけるように設計されているため、「まあ、12個の記述子が用意されています. あら、さっき言ったけど、あなたが何かをする前に、そのうちの 3 人が浮上してしまったのよ。」
Grrr は、シナリオをほぼ完璧に仕上げました。記述子を一度登録/登録解除すると、イベントがトリガーされたときに、関連する記述子がイベントと共に返されます。