SETBUF(3)

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

SINOPSIS
#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

DESCRIPCIÓN
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);

VALOR DEVUELTO
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.

ATRIBUTOS
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

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

ERRORES
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 */
    }

VÉASE TAMBIÉN
stdbuf(1), fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3)

COLOFÓN
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/.

TRADUCCIÓN
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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>..