命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | io‎ | basic streambuf
 
 
 
 
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()
指定为空操作
所有情况

[编辑] 参阅

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