命名空间
变体
操作

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++ 标准。

DR 应用于 已发布行为 正确行为
LWG 158 C++98 仅当 gptr() 不为空且不等于 egptr() 时,才指定 setbuf 的默认行为
如果 gptr() 不为 null 且不等于 egptr()
指定为无操作
适用于所有情况

[编辑] 参见

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