2017-06-02 10 views
0

poll()関数はパイプとソケットを多重化するのに非常に便利ですが、私自身のパイプを実装し、poll POLLINとPOLLOUTイベントの場合、どうすればいいですか?読書のためのpoll関数の記述子を作成する

int self = GenerateMyPipe(); 
int sock = socket(...); 
struct pollfd fd[2]; 
//Init Pollfd and Stuff... 
poll(fd, 2, -1); 
... 

おかげで...

+0

Linuxを使用していますか? [eventfd()](http://man7.org/linux/man-pages/man2/eventfd.2.html)を参照してください。 – Barmar

答えて

0

あり、このための標準的な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"の値を書き込むことが可能な場合。

あなたは記述子に書き込むことによって、カウンタを変更します。

関連する問題