poll()関数はパイプとソケットを多重化するのに非常に便利ですが、私自身のパイプを実装し、poll POLLINとPOLLOUTイベントの場合、どうすればいいですか?読書のためのpoll関数の記述子を作成する
int self = GenerateMyPipe();
int sock = socket(...);
struct pollfd fd[2];
//Init Pollfd and Stuff...
poll(fd, 2, -1);
...
おかげで...
poll()関数はパイプとソケットを多重化するのに非常に便利ですが、私自身のパイプを実装し、poll POLLINとPOLLOUTイベントの場合、どうすればいいですか?読書のためのpoll関数の記述子を作成する
int self = GenerateMyPipe();
int sock = socket(...);
struct pollfd fd[2];
//Init Pollfd and Stuff...
poll(fd, 2, -1);
...
おかげで...
あり、このための標準的なPOSIX方法はませんが、Linux上で、あなたがeventfd()
eventfd()
として使用することができます "のeventfdオブジェクト" を作成し使用することができますユーザー空間アプリケーションによるイベント の待機/通知メカニズム、およびユーザー空間アプリケーションにイベントの通知を行うカーネル によって制御されます。オブジェクトには、 カーネルによってメンテナンスされている符号なし64ビット整数(uint64_t)カウンタ が含まれています。このカウンタは、 引数initvalで指定された値で初期化されます。 ;もし
、ファイルディスクリプタは読み出し可能となる(
poll(2)
POLLIN
フラグselect(2)
readfds
引数):次のように
...
返されたファイルディスクリプタは、poll(2)
(および同様epoll(7)
)とselect(2)
をサポートしていますカウンタは0より大きい の値を持ちます。ファイル記述書き込み可能(
select(2)
writefds
引数です。poll(2)
POLLOUT
フラグ) にブロッキングなしで少なくとも "1"の値を書き込むことが可能な場合。
あなたは記述子に書き込むことによって、カウンタを変更します。
Linuxを使用していますか? [eventfd()](http://man7.org/linux/man-pages/man2/eventfd.2.html)を参照してください。 – Barmar