2009-08-08 4 views
3

Asioに2つのストリーム指向のI/Oオブジェクトがある場合、片方のデバイスから両方向にデータを転送する最も簡単な方法は何でしょうか?おそらくboost::iostreams::combinationまたはboost::iostreams:copyでこれを行うことができますか?あるいは、手動でアプローチする方が良いです - それぞれのデータを待ってから、もう一方のストリームに書き出しますか?つまり、BoostAsioを利用して最小限のコードを生成するにはどうすればよいですか?Asioの2つのデバイス/ストリームをブリッジするエレガントな方法はありますか?

例アプリケーションは、this questionで要求されているように、シリアルポートとTCPソケットの間でストリーミングされます。

答えて

4

標準のC++ストリームでは、以下のことができます.Asioと似たようなことはできませんか?

// Read all data from in and write to out. 
void forward_data(std::istream& in, std::ostream& out) 
{ 
    out << in.rdbuf(); 
} 
+0

入力ストリームが閉じられるまでブロックされますか?双方向ストリームはどうですか? –

+0

がファイルの終わりに達するまでデータが供給されると、Asioがどのようにバッファを実装するかを調べなければなりません。入力が閉じられたときにファイルの終わりが送信された場合。 rdbuf()はstd :: iosのメソッドなので、std :: istreamとstd :: ostreamの両方で利用できます。 –