次の特性を持つ stdin/stdout を介したノンブロッキング IO の最適なソリューションを見つけようとしています。
- 十分なデータがある限り、nサイズのチャンクで読み取ります。
- 十分なデータがない場合は、部分的なチャンクで読み取ります。
- 利用可能なデータがない場合は、データが得られるまでブロックします (たとえnよりも小さい場合でも)。
目標は、「制御」コードをすぐに処理しながら、大規模なデータセットを効率的に転送できるようにすることです (部分的に満たされたバッファーにコードを残すのではなく)。
スレッドと istream::get() ループを使用するか、プラットフォーム固有のコードをたくさん書くことでこれを達成できることを私は知っています (Windows ではファイル ハンドルで select() を実行できないため)... (( istream::readsome() も有望に思えますが、Googleで見つけた唯一の結果は、実際にはうまく機能しないと言っている人だけでした.))
私はこれらの API を使ったコーディングをあまり行っていないので、もっと良い方法があるかもしれません。