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) |
setbuf(s, n) of the most derived class.| s | - | pointer to the first CharT in the user-provided buffer |
| n | - | the number of CharT elements in the user-provided buffer |
setbuf(s, n)
this
Provides a 10k buffer for reading. On linux, the strace utility may be used to observe the actual number of bytes read.
#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';
}The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 158 | C++98 | the default behavior of setbuf was only specifiedif gptr() is not null and not equal to egptr() | specified as no-op for all cases |
|
[virtual] | attempts to replace the controlled character sequence with an array (virtual protected member function of std::basic_stringbuf<CharT,Traits,Allocator>) |
|
[virtual] | provides user-supplied buffer or turns this filebuf unbuffered (virtual protected member function of std::basic_filebuf<CharT,Traits>) |
|
[virtual] | attempts to replace the controlled character sequence with an array (virtual protected member function of std::strstreambuf) |
| sets the buffer for a file stream (function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_streambuf/pubsetbuf