2017-02-12 4 views
0

私のアプリケーションで別のプロセスを開き、popenを使用してその出力を解析しています。プログラムが成果を上げたらすぐに通知を受けたいと思っています。現在、私のプログラムのすべてのものは、そのようなアクションのためにepollを使用しています。今popenfdの代わりにFILE *を返します。 fileno関数を使用し、結果としてfdepollに格納することはできませんか?そうでない場合、別の方法がありますか?私はプロセスをブロックしたくないので、なぜ私は通知をしたいのですか。epollでFILEを使用する

+0

私はバッファリングされたI/O( 'FILE *')と(e)pollを混ぜることをお勧めします。個人的には、自分自身で 'popen_fd'を書いて、読み込み可能なディスクリプタを返すだけです。 – melpomene

答えて

0

はい、ファイルディスクリプタで余分なことをしない限り、安全であるように注意しない限り安全です。もう1つのことは、おそらくファイル記述子を非ブロックとしてマークしたいということです。だからあなたはread()をブロックすることなく、EBUSYまたはEAGAINチェックerrnoを処理することができます。

+0

'FILE *'インタフェースのファイル記述子で 'epoll()'を使うのは安全だと思います。しかし、*ファイル記述子を非ブロックとしてマークする*?実際の読み込みが質問で言及されているような 'FILE * 'ベースのstdio関数を介して行われるならば、安全であることは保証されているとは思いません。 'FILE *'の基礎となるファイル記述子を非ブロックにすることは、ライブラリ呼び出しが非ブロック記述子を使うようには設計されていないので、重大な問題を引き起こす可能性があります。 –

関連する問題