ofstream+flock

C++のofstreamは便利ですが、lock機能がありません。

fopenとか使うなら、flock(fileno(fp), LOCK_EX); とかやるところですが、ofstreamではそういった機能がない。bootstだとその辺がマシになるようなので、将来的にはC++0xに同等の機能が導入されるものと見込まれますが、今のC++ with STL環境では実現できない。
あとboostみたいに別途インストールが必要なものは汎用性が低くなるので使いたくない。


CGIまわりの処理を組んでいて、この辺で困ってしまったので、仕方がなくfileのstream処理部分だけを自作してみました。
std::endlとかまで使えるようにするにはbasic_ostreamを継承する必要があるようですが、そこまでやるのは面倒なので、既に出来上がった文字列を出力する機能のみを実装。


filestreamと言う名前のclassとして、次のように使う。

filestream fs;
if (fs.open("filename", "a"))
{
ostringstream os;
os << "hogehoge\n";
fs.lock();
fs << os.str();
fs.unlock();
}

内部ではfopenの処理になっているわけです。
operator<< で、引数に文字列を得て、それをfprintfするだけの単純処理です。
デストラクタでは念のためflockの解除と、そしてfcloseを実行します。

こんな感じで、既存のofstreamを使う処理を大きく変えずに、lock付きの出力が可能となりました。
皆様も一度お試し下さい。

2009/06/25(木)12:02 |Comments(0) |Trackback(0)

C++ | ソフトウェア開発 | コンピュータ | [編集]

▲ページトップ

コメント

コメントの投稿

Unicode 5.2の動向 ホーム IRG
トラックバック

この記事にトラックバックする(FC2ブログユーザー)
▲ページトップ

カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

プロフィール

miraicorp

Author:miraicorp
未来情報産業(株) 社長

主として「ICカードこれひとつ」や「文字、文字コード」処理、時々C++などについて記述しています。

twitterツイッター

管理用

検索フォーム

お知らせ

コメント等お気軽にどうぞ。

気に入ったら拍手して頂けると、今後の記事を書く際の参考や励みになります。

■お仕事を募集しております
ソフトウェア製造の仕事や、原稿執筆の仕事などを随時受け付けております。
お気軽にご相談下さい

■初めての方へ
こまごまと更新しているため、他にも関連する記事があるかもしれません。
「月別アーカイブ」「検索フォーム」「カテゴリ」などをお試し下さい。
トップページはこちら

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

広告枠

メール

メールはこちら

リンク

このブログをリンクに追加する

RSSリンクの表示

QRコード

QR