読み取り用に開いているファイル記述子がありますが、これは非ブロッキングである可能性があります。私がする必要があるのは、EOFに達するまですべてのデータを読み取り、そのデータを書き込み可能なファイル記述子に書き込むことです。このコピーを実行するプロセスは、周囲で何が起こっているかを「認識」していないため、データを待っている間は何か便利なことができるとは思いません。また、while
ループを使用したくerrno
ありません( EAGAIN
)無駄だと思うので。データが利用可能になるまで、コピープロセスの実行をブロックまたは一時停止する方法はありますか?
2 に答える
4
他の答えは単にO_NONBLOCK
設定を解除し、ファイルをブロックに戻します。それがあなたの状況でうまくいくなら、それは完全に問題ありません。ただし、そうでない場合は、select()
非ブロックファイル記述子が読み取り可能になるまでブロックするために使用できます。
于 2010-05-23T12:19:12.650 に答える
2
Linux SCSI Generic(sg)HOWTOの第7章には、これを行う方法の例が示されています。
int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
于 2010-05-22T14:39:56.133 に答える