Namespaces
Variants

std:: setbuf

From cppreference.net
< cpp ‎ | io ‎ | c
Definido en el encabezado <cstdio>
void setbuf ( std:: FILE * stream, char * buffer ) ;

Establece el búfer interno a utilizar para las operaciones de E/S realizadas en el flujo C stream .

Si buffer no es nulo, equivalente a std:: setvbuf ( stream, buffer, _IOFBF , BUFSIZ ) .

Si buffer es nulo, equivalente a std:: setvbuf ( stream, nullptr, _IONBF , 0 ) , lo cual desactiva el almacenamiento en búfer.

Contenidos

Parámetros

stream - el flujo de archivo al que establecer el búfer
buffer - puntero a un búfer para que lo use el flujo. Si se proporciona un puntero nulo, se desactiva el almacenamiento en búfer. Si no es nulo, debe poder contener al menos BUFSIZ caracteres

Valor de retorno

(ninguno)

Notas

Si BUFSIZ no es el tamaño de búfer apropiado, std::setvbuf puede utilizarse para cambiarlo.

std::setvbuf también debería usarse para detectar errores, ya que std::setbuf no indica éxito o fracaso.

Esta función solo puede utilizarse después de que stream haya sido asociado con un archivo abierto, pero antes de cualquier otra operación (excepto una llamada fallida a std::setbuf / std::setvbuf ).

Un error común es establecer el búfer de stdin o stdout a un array cuyo tiempo de vida finaliza antes de que termine el programa:

int main()
{
    char buf[BUFSIZ];
    std::setbuf(stdin, buf);
} // el tiempo de vida de buf termina, comportamiento indefinido

Ejemplo

std::setbuf puede utilizarse para desactivar el almacenamiento en búfer en flujos que requieren salida inmediata.

#include <chrono>
#include <cstdio>
#include <thread>
int main()
{
    using namespace std::chrono_literals;
    std::setbuf(stdout, nullptr); // unbuffered stdout
    std::putchar('a'); // appears immediately on unbuffered stream
    std::this_thread::sleep_for(1s);
    std::putchar('b');
}

Salida:

ab

Véase también

establece el búfer y su tamaño para un flujo de archivo
(función)