名前空間
変種
操作

std::basic_streambuf

提供: cppreference.com
< cpp‎ | io
 
 
入出力ライブラリ
入出力マニピュレータ
Cスタイルの入出力
バッファ
basic_streambuf
(C++98で非推奨)
ストリーム
抽象
ファイル入出力
文字列入出力
配列入出力
(C++98で非推奨)
(C++98で非推奨)
(C++98で非推奨)
同期化出力
エラーカテゴリインタフェース
(C++11)
 
 
ヘッダ <streambuf> で定義
template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_streambuf;

クラス basic_streambuf は文字シーケンスの入出力を制御します。 以下のものを持ち、それらへのアクセスを提供します。

  1. 制御された文字シーケンス (バッファとも言います)。 入力操作をバッファリングするのための入力シーケンス (get 領域とも言います) または出力操作をバッファリングするための出力シーケンス (put 領域とも言います) またはその両方を持つかもしれません。
  2. 紐付けられた文字シーケンス (入力に対しては ソース、出力に対しては シンクとも言います)。 OS の API を通してアクセスされるエンティティ (ファイル、 TCP ソケット、シリアルポート、その他のキャラクタデバイス) かもしれませんし、文字のソースまたはシンクとして解釈可能なオブジェクト (std::vector、配列、文字列リテラル) かもしれません。

入出力ストリームオブジェクト std::basic_istreamstd::basic_ostream およびそれらから派生するすべてのオブジェクト (std::ofstreamstd::stringstream など) は完全に std::basic_streambuf の観点から実装されます。

制御された文字シーケンスは CharT の配列であり、常に、紐付けられている文字シーケンスの部分シーケンス (または「窓」) を表します。 その状態は3つのポインタで記述されます。

  1. 先頭ポインタ — 常にバッファの最も低い要素を指します。
  2. 次ポインタ — 読み書きの次の候補となる要素を指します。
  3. 終端ポインタ — バッファの終端���指します。

basic_streambuf は入力 (この場合、先頭、次、終端ポインタによって記述されるバッファは get 領域と呼ばれます)、出力 (put 領域)、または入力と出力を同時にサポートするかもしれません。 後者の場合、6つのポインタが追跡されます。 それらはすべて同じ文字配列の、または2つの別々の配列の要素を指すかもしれません。

put 領域の次ポインタが終端ポインタより小さい場合は、書き込み位置が利用可能です。 次ポインタは、逆参照し、代入することができます。

get 領域の次ポインタが終端ポインタより小さい場合は、読み込み位置が利用可能です。 次ポインタは、逆参照し、読み込むことができます。

get 領域の次ポインタが先頭ポインタより大きい場合は、 putback 位置が利用可能であり、次ポインタは、文字を get 領域に戻すために、デクリメントし、逆参照し、代入することができます。

制御されたシーケンス内の文字表現およびエンコーディングは、紐付けられているシーケンス内の文字表現と異なるかもしれません。 その場合、一般的には変換を行うためにロケールの std::codecvt ファセットが使用されます。 よくある例は std::wfstream オブジェクトを通してアクセスする UTF-8 (または他のマルチバイトエンコーディング) のファイルです。 制御されたシーケンスは wchar_t 文字から構成されますが、紐付けられているシーケンスはバイトから構成されます。

std::basic_streambuf 基底クラスの一般的な実装は、6つの CharT* ポインタと std::locale のコピーだけをデータメンバとして保持します。 さらに、処理系はロケールファセットのキャッシュされたコピーを保持するかもしれません (imbue() が呼ばれると無効化されます)。 std::basic_filebufstd::basic_stringbuf などの具象クラスは std::basic_streambuf から派生します。

std-streambuf.svg

2つの便利な typedef が標準ライブラリによって提供されます。

ヘッダ <streambuf> で定義
定義
streambuf basic_streambuf<char>
wstreambuf basic_streambuf<wchar_t>

目次

[編集] メンバ型

メンバ型 定義
char_type CharT[edit]
traits_type TraitsTraits::char_typeCharT でない場合、プログラムは ill-formed です [edit]
int_type Traits::int_type[edit]
pos_type Traits::pos_type[edit]
off_type Traits::off_type[edit]

[編集] メンバ関数

basic_streambuf オブジェクトを破棄します
(仮想パブリックメンバ関数) [edit]
ロケール
imbue() を呼びます
(パブリックメンバ関数) [edit]
紐付けられているロケールのコピーを取得します
(パブリックメンバ関数) [edit]
位置設定
setbuf() を呼びます
(パブリックメンバ関数) [edit]
seekoff() を呼びます
(パブリックメンバ関数) [edit]
seekpos() を呼びます
(パブリックメンバ関数) [edit]
sync() を呼びます
(パブリックメンバ関数) [edit]
get 領域
get 領域内の直ちに利用可能な文字数を取得します
(パブリックメンバ関数) [edit]
入力シーケンスを進めて、その後、進めずに文字をひとつ読み込みます
(パブリックメンバ関数) [edit]
入力シーケンスから文字をひとつ読み込み、シーケンスを進めます
(パブリックメンバ関数) [edit]
stossc
(C++98で非推奨)(C++17で削除)
sbumpc() を呼んだかのように入力シーケンスを進めて、その結果を破棄します
(パブリックメンバ関数) [edit]
シーケンスを進めずに入力シーケンスから文字をひとつ読み込みます
(パブリックメンバ関数) [edit]
xsgetn() を呼びます
(パブリックメンバ関数) [edit]
put 領域
文字をひとつ put 領域に書き込み、次ポインタを進めます
(パブリックメンバ関数) [edit]
xsputn() を呼びます
(パブリックメンバ関数) [edit]
putback
入力シーケンスに文字をひとつ戻します
(パブリックメンバ関数) [edit]
入力シーケンスの次ポインタを1つ前に移動させます
(パブリックメンバ関数) [edit]

プロテクテッドメンバ関数

basic_streambuf オブジェクトを構築します
(プロテクテッドメンバ関数) [edit]
(C++11)
basic_streambuf オブジェクトを置き換えます
(プロテクテッドメンバ関数) [edit]
(C++11)
2つの basic_streambuf オブジェクトを入れ替えます
(プロテクテッドメンバ関数) [edit]
ロケール
[仮想]
紐付けられているロケールを変更します
(仮想プロテクテッドメンバ関数) [edit]
位置設定
[仮想]
可能であれば、バッファをユーザ定義の配列に置き換えます
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
入力シーケンス、出力シーケンス、またはその両方の次ポインタの位置を相対位置を使用して再設定します
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
入力シーケンス、出力シーケンス、またはその両方の次ポインタの位置を絶対位置を使用して再設定します
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
バッファを紐付けられている文字シーケンスと同期します
(仮想プロテクテッドメンバ関数) [edit]
get 領域
[仮想]
紐付けられている入力シーケンス内の入力のために利用可能な文字数 (もし判れば) を取得します
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
紐付けられている入力シーケンスから get 領域に文字を読み込みます
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
紐付けられている入力シーケンスから get 領域に文字を読み込み、次ポインタを進めます
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
入力シーケンスから複数の文字を読み込みます
(仮想プロテクテッドメンバ関数) [edit]
get 領域の先頭、現在の文字、終端へのポインタを返します
(プロテクテッドメンバ関数) [edit]
入力シーケンスの次ポインタを進めます
(プロテクテッドメンバ関数) [edit]
入力シーケンスの先頭、次、終端ポインタの位置を再設定します
(プロテクテッドメンバ関数) [edit]
put 領域
[仮想]
出力シーケンスに複数の文字を出力します
(仮想プロテクテッドメンバ関数) [edit]
[仮想]
put 領域から紐付けられている出力シーケンスに文字を書き込みます
(仮想プロテクテッドメンバ関数) [edit]
put 領域の先頭、現在の文字、終端へのポインタを返します
(プロテクテッドメンバ関数) [edit]
出力シーケンスの次ポインタを進めます
(プロテクテッドメンバ関数) [edit]
出力シーケンスの先頭、次、終端ポインタの位置を再設定します
(プロテクテッドメンバ関数) [edit]
putback
[仮想]
入力シーケンスに文字を戻します。 入力シーケンスを変更する可能性があります
(仮想プロテクテッドメンバ関数) [edit]

[編集] 関連項目

C の入出力ストリームを制御するために必要なすべての情報を保持できるオブジェクト型
(typedef) [edit]