2016-07-07 34 views
3

Cプログラムでは、stdinからテキスト行を読みたいと思っています。 同時に私は別のファイル記述子からのデータを扱いたいと思います。ノンブロッキングの方法でテキスト行を読む

pollを使用して、2つのソースのいずれかが読み込み可能になるのを待ってそれに応じて処理しようとしました。しかし、pollは裸のファイル記述子を必要とし、fgetsのようなもので全行を読むにはFILEハンドルが必要です。

filenoまたはfdopenを使用して「変換」することはできますが、両方を混在させて使用することはお勧めできません。

したがって、ブロックやスレッドなしでテキストの行を待つ良い方法はありますか?

+0

なぜstdinから読み込むには 'read()'のようなシステムコールを使わないのですか? – MikeCAT

+0

'read'は行の最後まで読みにくいです。これは、FILEに似た独自のバッファリングインフラストラクチャを実装する必要があることを意味します。 – michas

+0

'fdopen'は私にとって正しい方法です。それを試しましたか? –

答えて

0

多重化には何でも使用できます(select()poll()epoll_wait())。しかし、stdinからfgets()を読み取るべきではありません。なぜなら、多重化は私たちが完全な行かどうかについて何も知らないからです。だから場合によってはブロックされるかもしれません。まだ完全な行が存在しないことを示すカスタム行読み込み関数を記述して、すぐに戻ります。

関連する問題