Namespaces
Variants

std::basic_filebuf<CharT,Traits>:: setbuf

From cppreference.net
protected :
virtual std:: basic_streambuf < CharT, Traits > * setbuf ( char_type * s, std:: streamsize n )

s がヌルポインタで、 n がゼロの場合、ファイルバッファは出力に対して 非バッファリング 状態となり、 pbase() pptr() はヌルになり、すべての出力は即座にファイルに送信されます。

それ以外の場合、 setbuf() の呼び出しは内部バッファ(制御文字シーケンス)を、ユーザー提供の文字配列で置き換えます。この配列の先頭要素は s によって指され、この std::basic_filebuf オブジェクトがその配列内の最大 n バイトをバッファリングに使用することを許可します。

この関数はprotected virtualであり、 pubsetbuf() を通じて、またはユーザー定義の std::basic_filebuf から派生したクラスのメンバー関数からのみ呼び出すことができます。

目次

パラメータ

s - ユーザー提供バッファ内の最初の CharT へのポインタ、または null
n - ユーザー提供バッファ内の CharT 要素の数、またはゼロ

戻り値

this

注記

この関数が使用される条件と、提供されたバッファの使用方法は実装定義です。

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

標準は、この関数の動作について、I/Oが行われる前に呼び出された setbuf ( 0 , 0 ) が非バッファリング出力を設定することを要求する以外、何も定義していません。

読み取り用に10KBのバッファを提供します。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';
}

出力例:

356010

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 173 C++98 n の型が int として誤って指定されていた std::streamsize に修正

関連項目

setbufを呼び出す setbuf ( )
( std::basic_streambuf<CharT,Traits> の公開メンバ関数)
ファイルストリームのバッファとそのサイズを設定する
(関数)