SETBUF(3) Manual del Programador de Linux SETBUF(3)

setbuf, setbuffer, setlinebuf, setvbuf - operaciones sobre búferes de flujos

#include <stdio.h>
void setbuf(FILE *flujo, char *buf);
void setbuffer(FILE *flujo, char *buf, size_ttam);
void setlinebuf(FILE *flujo);
int setvbuf(FILE *flujo, char *buf, int modo , size_t tam);
Requisitos de Macros de Prueba de Características para glibc (véase feature_test_macros(7)):

setbuffer(), setlinebuf(): Since glibc 2.19: _DEFAULT_SOURCE Glibc 2.19 and earlier: _BSD_SOURCE

Los tres tipos disponibles de estrategias de asignación de búferes son sin búfer, con búfer de bloque, y con búfer de línea. Cuando un flujo de salida está sin búfer, la información aparece en el fichero de destino o en la terminal tan pronto como se escribe; cuando está con búfer de bloque se guardan y escriben muchos caracteres como un bloque; cuando está con búfer de línea los caracteres se van guardando hasta que se da un salto de línea o si la entrada se lee de cualquier flujo asociado a un dispositivo de terminal (normalmente la entrada estándar stdin). Se puede emplear la función fflush(3) para forzar la escritura del bloque más pronto de la cuenta. (Vea fclose(3).)

Normally all files are block buffered. If a stream refers to a terminal (as stdout normally does), it is line buffered. The standard error stream stderr is always unbuffered by default.

The setvbuf() function may be used on any open stream to change its buffer. The mode argument must be one of the following three macros:

_IONBF
sin búfer
_IOLBF
búfer de línea
_IOFBF
búfer completo

Salvo para ficheros sin búfer, el argumento buf debería apuntar a un búfer de al menos tam bytes de grande; este búfer se utilizará en lugar del actual. Si el argumento buf es NULL, sólo el modo se ve afectado; se obtendrá un nuevo búfer en la siguiente operación de lectura o escritura. La función setvbuf() puede ser usada solamente después de abrir un flujo y antes de que ninguna otra operación se haya realizado sobre él.

Las otras tres funciones son, en efecto, simplemente otras formas simplificadas de llamar a setvbuf(). La función setbuf() es exactamente equivalente a la llamada


setvbuf(flujo, buf, buf ? _IOFBF : _IONBF, BUFSIZ);

La función setbuffer() es lo mismo, excepto en que el tamaño del búfer se deja a la discreción del usuario, en vez de estar determinado por el valor por omisión BUFSIZ. La función setlinebuf() es exactamente equivalente a la llamada:


setvbuf(stream, NULL, _IOLBF, 0);

The function setvbuf() returns 0 on success. It returns nonzero on failure (mode is invalid or the request cannot be honored). It may set errno on failure.

The other functions do not return a value.

Para obtener una explicación de los términos usados en esta sección, véase attributes(7).
Interfaz Atributo Valor
setbuf(), setbuffer(), setlinebuf(), setvbuf() Seguridad del hilo Multi-hilo seguro

The setbuf() and setvbuf() functions conform to C89 and C99.

You must make sure that the space that buf points to still exists by the time stream is closed, which also happens at program termination. For example, the following is invalid:
#include <stdio.h>
int
main(void)
{
    auto char buf[BUFSIZ];
    setbuf(stdin, buf);
    printf("¡Hola a todos!\n");
    return 0; /* Se destruye buf, se cierra stdin */
}

stdbuf(1), fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3)

Esta página es parte de la versión 5.10 del proyecto Linux man-pages. Puede encontrar una descripción del proyecto, información sobre cómo informar errores y la última versión de esta página en https://www.kernel.org/doc/man-pages/.

La traducción al español de esta página del manual fue creada por Gerardo Aburruzaga García <gerardo.aburruzaga@uca.es>, Juan Piernas <piernas@ditec.um.es> y Miguel Pérez Ibars <mpi79470@alu.um.es>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org>..

6 Marzo 2019 Linux