Namespaces
Variants

setbuf

De es.cppreference.net
< c | io
 
 
Entrada/salida de archivos
Tipos y objetos
        
Funciones
Acceso a archivos
(C95)
Entrada/salida sin formato
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Entrada con formato
Entrada/salida directa
Salida con formato
Posicionamiento de archivos
Manejo de errores
Operaciones sobre archivos
 
Definido en el encabezado <stdio.h>
void setbuf( FILE* stream, char* buffer );
(hasta C99)
void setbuf( FILE* restrict stream, char* restrict buffer );
(desde C99)
#define BUFSIZ  /* unspecified */

Establece el búfer interno que se usará para las operaciones de flujo. Debe tener al menos BUFSIZ caracteres de longitud.

Si buffer no es nulo, equivale a setvbuf(stream, buffer, _IOFBF, BUFSIZ).

Si buffer es nulo, equivale a setvbuf(stream, NULL, _IONBF, 0), lo que desactiva el almacenamiento en búfer.

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

Notas

Si BUFSIZ no es el tamaño de búfer apropiado, setvbuf se puede usar para cambiarlo.

setvbuf también se debe usar para detectar errores, ya que setbuf no indica éxito o fracaso.

Esta función solo se puede usar después de que stream se haya asociado con un archivo abierto, pero antes de cualquier otra operación (que no sea una llamada fallida a setbuf/setvbuf).

Un error común es configurar el búfer de stdin o stdout a un arreglo cuyo tiempo de vida termina antes de que el programa finalice:

int main(void)
{
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior

Ejemplo

setbuf se puede usar para deshabilitar el almacenamiento en búfer en flujos que requieren salida inmediata.

#include <stdio.h>
#include <threads.h>

int main(void)
{
    setbuf(stdout, NULL); // unbuffered stdout
    putchar('a'); // 'a' appears immediately if stdout is unbuffered
    thrd_sleep(&(struct timespec){ .tv_sec = 1 }, NULL); // sleep 1 sec
    putchar('b');
}

Salida:

ab

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.21.5.5 La función setbuf (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.21.5.5 La función setbuf (p: 225)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.21.5.5 La función setbuf (p: 307-308)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.19.5.5 La función setbuf (p: 273)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.9.5.5 La función setbuf

Véase también

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