名稱空間
變體
操作

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 的虛保護成員函式) [編輯]
為檔案流設定緩衝區
(函式) [編輯]