Namespaces
Variants

std::basic_streambuf<CharT,Traits>:: pubsetbuf, std::basic_streambuf<CharT,Traits>:: setbuf

From cppreference.net
public :
basic_streambuf < CharT, Traits > * pubsetbuf ( char_type * s, std:: streamsize n )
(1)
protected :
virtual basic_streambuf < CharT, Traits > * setbuf ( char_type * s, std:: streamsize n )
(2)
1) 调用最派生类的 setbuf ( s, n )
2) 此函数的基类版本无实际作用。派生类可重写此函数,以实现允许移除或替换受控字符序列(缓冲区)为用户提供的数组,或用于任何其他实现特定的目的。

目录

参数

s - 指向用户提供缓冲区中首个 CharT 的指针
n - 用户提供缓冲区中 CharT 元素的数量

返回值

1) setbuf ( s, n ) 的返回值。
2) this

示例

提供了一个10k字节的读取缓冲区。在Linux系统上,可使用strace工具观察实际读取的字节数。

#include <fstream>
#include <iostream>
#include <string>
int main()
{
    int cnt = 0;
    std::ifstream file;
    char buf[1024 * 10 + 1];
    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++标准。

缺陷报告 应用于 发布时的行为 正确行为
LWG 158 C++98 setbuf 的默认行为仅在
gptr() 非空且不等于 egptr() 时被规定
规定为对所有情况
均为无操作

参见

[virtual]
尝试用数组替换受控字符序列
( std::basic_stringbuf<CharT,Traits,Allocator> 的虚受保护成员函数)
[virtual]
提供用户指定的缓冲区或使该文件流无缓冲
( std::basic_filebuf<CharT,Traits> 的虚受保护成员函数)
[virtual]
尝试用数组替换受控字符序列
( std::strstreambuf 的虚受保护成员函数)
设置文件流的缓冲区
(函数)