std::basic_streambuf<CharT,Traits>:: pubsetbuf, std::basic_streambuf<CharT,Traits>:: setbuf
From cppreference.net
<
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() 时被规定 |
规定为对所有情况
均为无操作 |
参见
|
[virtual]
|
尝试用数组替换受控字符序列
(
std::basic_stringbuf<CharT,Traits,Allocator>
的虚受保护成员函数)
|
|
[virtual]
|
提供用户指定的缓冲区或使该文件流无缓冲
(
std::basic_filebuf<CharT,Traits>
的虚受保护成员函数)
|
|
[virtual]
|
尝试用数组替换受控字符序列
(
std::strstreambuf
的虚受保护成员函数)
|
|
设置文件流的缓冲区
(函数) |