Namespaces
Variants

setbuf

From cppreference.net
< c ‎ | io
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 para usar en operaciones de flujo. Debe tener al menos BUFSIZ caracteres de longitud.

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

Si buffer es nulo, equivalente a setvbuf ( stream, NULL , _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

Valor de retorno

Ninguno.

Notas

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

setvbuf también debería usarse para detectar errores, ya que 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 setbuf / setvbuf ).

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

int main(void) {
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // la vida útil de buf termina, comportamiento indefinido

Ejemplo

setbuf puede utilizarse para desactivar 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 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)