イーガインの後に強制ブロッキングを読んでいますか?
-
04-10-2019 - |
質問
非ブロッキングである可能性のある読み取り用に開いているファイル記述子があります。私がしなければならないことは、EOFに到達するまですべてのデータを読み取り、そのデータを書き込み可能なファイル記述子に書き込むことです。このコピーを実行するプロセスは、その周りで起こっていることを「気づいている」わけではないので、データを待っている間に何か役に立つことができるとは思わず、使用したくありません。 while
ループ(while errno
ではありません EAGAIN
)私はそれが無駄になると思うからです。データが利用可能になるまで、コピープロセスの実行をブロックまたは停止する方法はありますか?
解決
あなたの他の答えは単に解明されます O_NONBLOCK
, 、ファイルをブロックに戻します。それがあなたの状況で機能する場合、それはまったく問題ありません。しかし、そうでない場合は、使用できます select()
非ブロッキングファイル記述子が読み取るまでブロックします。
他のヒント
Linux SCSIジェネリック(SG)の第7章 例 これを行う方法:
int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
所属していません StackOverflow