std::basic_streambuf<CharT,Traits>::pubsetbuf, std::basic_streambuf<CharT,Traits>::setbuf
來自 cppreference.com
< 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 的虛保護成員函式) |
為檔案流設定緩衝區 (函式) |