Iostreams

標準出力とファイルにログを出力したい

Iostreamsのtee_deviceを使って2つのデバイスに出力することにしました。 #include <iostream> #include <boost/iostreams/filtering_stream.hpp> #include <boost/iostreams/device/file.hpp> #include <boost/iostreams/tee.hpp> #include <boost/date_time/posix_time/posix_time.hpp> namespace myns{ namespace io = boost::iostreams; io::fil…</boost/date_time/posix_time/posix_time.hpp></boost/iostreams/tee.hpp></boost/iostreams/device/file.hpp></boost/iostreams/filtering_stream.hpp></iostream>

Boost.IostreamsのFilter作成!

Filterはデータに対して何らかの処理をするために使います。 作成したいコンセプトのクラスを継承し、それに対応するメンバを定義することで、簡単に作ることができます。ここではデータを逆順に出力するFilterを作成します。 #include <iostream> #include <boost/iostreams/filtering_stream.hpp> #include <boost/iostreams/device/back_inserter.hpp></boost/iostreams/device/back_inserter.hpp></boost/iostreams/filtering_stream.hpp></iostream>…

file_source, sinkとfile_descriptor_source, sink

使用する上で目立った違いは、改行コードの扱いでした。file_source, sinkは、ファイル読み込みの際、改行コード"\r\n"を"\n"に変換します。 そして書き込む際、"\n"を"\r\n"に変換して出力します。 これはstd::ifstream, ofstreamと同じ動作です。file_desc…

STLコンテナをSink/Sourceとして使う

Iostreamsでは、コンテナを入力元(Source)、出力先(Sink)として使うことができます。 Sourceとして使うには、boost::make_iterator_range関数を、 また、Sinkとして使うには、boost::iostreams::back_inserter関数を使います。 ファイルに書き出したりせず、…

stream, filtering_streamのコンストラクタとパイプライン

これらのコンストラクタはいくつかオーバーロードされてるのですが、 なるべく短いコードで書きたい(I/Oが行える状態にしたい)です。書きましょう。streamのコンストラクタ引数は、Deviceのコンストラクタ引数と同じものを取ります。 namespace io = boost::…

すぐにフィルタ処理を終えたいときはboost::iostreams::closeを使う

filtering_ostream::flushを呼び出すことで処理が完了すると思っていたのですが、そうでない場合がありました。 #include <iostream> #include <vector> #include <boost/iostreams/filtering_stream.hpp> #include <boost/iostreams/filter/gzip.hpp> #include <boost/iostreams/device/back_inserter.hpp> #include <boost/iostreams/copy.hpp> int main(){ namesp…</boost/iostreams/copy.hpp></boost/iostreams/device/back_inserter.hpp></boost/iostreams/filter/gzip.hpp></boost/iostreams/filtering_stream.hpp></vector></iostream>

Boost.IostreamsのFilterを使う!

Boost.IostreamsにはFilterというものがあります。 これを使うことでストリームから入力、ストリームへ出力するデータを加工できます。 #include <iostream> #include <boost/iostreams/filtering_stream.hpp> #include <boost/iostreams/filter/gzip.hpp> #include <boost/iostreams/device/file_descriptor.hpp> int main(){ namespace io = boost::iostreams; //データをgzip圧縮してフ…</boost/iostreams/device/file_descriptor.hpp></boost/iostreams/filter/gzip.hpp></boost/iostreams/filtering_stream.hpp></iostream>

Boost.Iostreamsでストリーム作成!

Boost.Iostreamsでできることのひとつとして、ストリームの作成が簡単にできる、というのがあります。それには、まず入出力するデータをやりとりするクラスを作ります。 (このクラスをDeviceといいます。また、出力DeviceはSink、入力DeviceはSourceと呼ばれ…

Boostで利用するzlibライブラリのビルド(Windows)

Boost.Iostreamsを利用してgzip圧縮・展開をすることができます。 そのためにはzlibというライブラリをビルドする必要があります。 UNIX系のOSではbjamを実行した際、デフォルトでビルドされるよう設定されているのですが、Windowsでは無効になっています。 …