Namespaces
Variants

std::basic_filebuf<CharT,Traits>:: setbuf

From cppreference.net
protected :
virtual std:: basic_streambuf < CharT, Traits > * setbuf ( char_type * s, std:: streamsize n )

Si s es un puntero nulo y n es cero, el filebuf se convierte en unbuffered para salida, lo que significa que pbase() y pptr() son nulos y cualquier salida se envía inmediatamente al archivo.

De lo contrario, una llamada a setbuf() reemplaza el buffer interno (la secuencia de caracteres controlada) con el arreglo de caracteres proporcionado por el usuario cuyo primer elemento es apuntado por s y permite que este objeto std::basic_filebuf utilice hasta n bytes en ese arreglo para el almacenamiento en búfer.

Esta función es protegida virtual, solo puede ser llamada a través de pubsetbuf() o desde funciones miembro de una clase definida por el usuario derivada de std::basic_filebuf .

Contenidos

Parámetros

s - puntero al primer CharT en el búfer proporcionado por el usuario o nulo
n - el número de elementos CharT en el búfer proporcionado por el usuario o cero

Valor de retorno

this

Notas

Las condiciones en las que esta función puede utilizarse y la forma en que se utiliza el búfer proporcionado están definidas por la implementación.

  • GCC 4.6 libstdc++
setbuf() solo puede llamarse cuando el std::basic_filebuf no está asociado con un archivo (no tiene efecto en caso contrario). Con un búfer proporcionado por el usuario, la lectura del archivo lee n-1 bytes a la vez.
  • Clang++3.0 libc++
setbuf() puede llamarse después de abrir el archivo, pero antes de cualquier operación de E/S (de lo contrario podría fallar). Con un búfer proporcionado por el usuario, la lectura del archivo lee los múltiplos más grandes de 4096 que quepan en el búfer.
  • Visual Studio 2010
setbuf() puede ser llamado en cualquier momento, incluso después de que haya ocurrido alguna operación de E/S. El contenido actual del búfer, si existe, se pierde.

El estándar no define ningún comportamiento para esta función excepto que setbuf ( 0 , 0 ) llamado antes de que se haya realizado cualquier operación de E/S debe establecer la salida sin búfer.

Ejemplo

Proporciona un búfer de 10k para lectura. En Linux, se puede utilizar la utilidad strace para observar el número real de bytes leídos.

#include <fstream>
#include <iostream>
#include <string>
int main()
{
    int cnt = 0;
    std::ifstream file;
    char buf[10241];
    file.rdbuf()->pubsetbuf(buf, sizeof buf);
    file.open("/usr/share/dict/words");
    for (std::string line; getline(file, line);)
        ++cnt;
    std::cout << cnt << '\n';
}

Salida posible:

356010

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 173 C++98 el tipo de n fue especificado incorrectamente como int corregido a std::streamsize

Véase también

invoca setbuf ( )
(función miembro pública de std::basic_streambuf<CharT,Traits> )
establece el búfer y su tamaño para un flujo de archivo
(función)