名前空間
変種
操作

std::basic_filebuf::setbuf

提供: cppreference.com
< cpp‎ | io‎ | basic filebuf
 
 
 
 
protected:
virtual std::basic_streambuf<CharT, Traits>* setbuf( char_type* s, std::streamsize n )

s がヌルポインタかつ n がゼロの場合、 filebuf は出力に対してバッファなしになります。 つまり、 pbase() および pptr() がヌルになり、あらゆる出力は直ちにファイルに送られます。

そうでなければ、 setbuf() の呼び出しは内部のバッファ (制御された文字シーケンス) を最初の要素が s によって指されているユーザ提供の文字配列に置き換えます。 これにより、この std::basic_filebuf オブジェクトはバッファリングのためにその配列内の最大 n バイトを使用できるようになります。

この関数は protected virtual です。 pubsetbuf() を通して、または std::basic_filebuf から派生したユーザ定義のクラスのメンバ関数からのみ、呼ばれる可能性があります。

目次

[編集] 引数

s - ユーザ提供バッファの最初のバイトへのポインタ、またはヌル
n - ユーザ提供バッファのバイト数、またはゼロ

[編集] 戻り値

this

[編集] ノート

この関数を使用できる状況および提供されたバッファの用途は処理系定義です。

  • GCC 4.6 libstdc++
setbuf()std::basic_filebuf がファイルと紐付けられていないときにのみ呼ぶことができます (そうでなければ効果を持ちません)。 ユーザ提供バッファを使用すると、ファイルから読み込みは一度に n-1 バイト読み込みます。
  • Clang++3.0 libc++
setbuf() はファイルを開いた後いかなる入出力も行う前に呼ぶことができます (そうでなければクラッシュする可能性があります)。 ユーザ提供バッファを使用すると、ファイルからの読み込みはそのバッファに収まる最大の 4096 の倍数を読み込みます。
  • Visual Studio 2010
setbuf() はいつでも呼ぶことができます (入出力が行われた後でも構いません)。 バッファの現在の内容 (もしあれば) は失われます。

いかなる入出力も行われる前に setbuf(0, 0) が呼ばれるとバッファなし出力に設定されることが要求されることを除いて、標準はこの関数に対するいかなる動作も定義していません。

[編集]

読み込み用に 10k のバッファを提供します。 Linux では実際に読み込まれたバイト数を観察するために strace ユーティリティを使用することができます。

#include <fstream>
#include <iostream>
#include <string>
 
int main()
{
        int cnt = 0;
        std::ifstream file;
        char buf[10241];
 
        file.rdbuf()->pubsetbuf(buf, sizeof buf);
        file.open("/usr/share/dict/words");
 
        for (std::string line; getline(file, line); )
                ++cnt;
        std::cout << cnt << '\n';
}


[編集] 関連項目

setbuf() を呼びます
(std::basic_streambufのパブリックメンバ関数) [edit]
ファイルストリームのためのバッファとそのサイズを設定します
(関数) [edit]