[[C++のiostream]] * C++のiostream感想-その2- [#q115bf28] そもそも iostream とか streambuf という名前に惑わされたような気がする。 ** iostream という名前 [#n26130e2] 最初が io なので、I/O と関係が深いと思ってしまう。 ところが、実は I/O はあまり関係無い(と思う)。むしろ 強調すべきは stream の方だ。あるいは buffer と 言ってもよいかも知れない。 buffer への data の出し入れを行う 仕掛けが iostream だと思う。I/O の方は読み込み buffer が 空になったり、書き込み buffer が一杯になった時に、 streambuf に「何とかしろ」と言うだけ。実際に streambuf が I/O をやったかどうかなど知ったことではない。 大事なのは 順番が維持されている(stream)ということだ。相手が seekable であれば位置の変更も有り得るが、それでも 順番は維持される。1番目に書かれたものが5番目に送られ 5番目に書かれたものが1番目に送られるなどということはない。 ** streambuf という名前 [#lfad007f] こちらが buffer かと思いきや(確かに buffer はこの class で確保 するのではあるが)、実はこちらが I/O 担当。 この class の役割は、iostream からの 「読み出し buffer が空になったから入力しろ」、 「書き込み buffer が一杯になったから書き出して space を作れ」 という指示に従うだけ。 ** [18-Nov-2010]と上に書いたのだが、どちらもバッファ。 [#w85cf412] - iostream はバッファ本体ではなく、バッファの入出力を制御するクラス。 - streambuf はバッファの本体。概念的には入出力装置と結びついているか否かにかかわらず存在する。 実際 fstream の本体である filebuf は、同じオブジェクトで、いくつでも(一度に一つずつなので何回でもというべきかもしれないが)ファイル実体と結びつけることができる。