Namespaces
Variants

std::basic_streambuf<CharT,Traits>:: pubsetbuf, std::basic_streambuf<CharT,Traits>:: setbuf

From cppreference.net
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)
**Примечание:** В данном случае весь текст внутри тегов ` ` является C++ кодом, который согласно инструкциям не подлежит переводу. Единственный текст для перевода - это номера версий (1) и (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 Applied to Behavior as published Correct behavior
LWG 158 C++98 the default behavior of setbuf was only specified
if gptr() is not null and not equal to egptr()
specified as no-op
for all cases

Смотрите также

[virtual]
пытается заменить управляемую последовательность символов массивом
(виртуальная защищённая функция-член std::basic_stringbuf<CharT,Traits,Allocator> )
[virtual]
предоставляет пользовательский буфер или делает этот filebuf небуферизированным
(виртуальная защищённая функция-член std::basic_filebuf<CharT,Traits> )
[virtual]
пытается заменить управляемую последовательность символов массивом
(виртуальная защищённая функция-член std::strstreambuf )
устанавливает буфер для файлового потока
(функция)