std::basic_streambuf<CharT,Traits>::pubsetbuf, std::basic_streambuf<CharT,Traits>::setbuf
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
Пример
Предоставляет буфер размером 10 КБ для чтения. В 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 | поведение по умолчанию setbuf было указано толькоесли gptr() не равен null и не равен egptr() | указано как пустая операция во всех случаях |
См. также
|
[виртуальная] | пытается заменить управляемую последовательность символов массивом (виртуальная защищённая функция-член std::basic_stringbuf<CharT,Traits,Allocator>) |
|
[виртуальная] | предоставляет буфер пользователя или отключает буферизацию этого filebuf (виртуальная защищённая функция-член std::basic_filebuf<CharT,Traits>) |
|
[виртуальная] | пытается заменить управляемую последовательность символов массивом (виртуальная защищённая функция-член std::strstreambuf) |
| устанавливает буфер для файлового потока (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_streambuf/pubsetbuf