setbuf
| 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) | |
Documentación de C++ para setbuf
| |