Provided by: manpages-es_1.55-10_all bug

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);

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).)  Normalmente todos los  ficheros  son  de
       búfer  de  bloque.  Cuando  ocurre  la  primera operación de E/S en un fichero, se llama a malloc(3) y se
       obtiene un búfer. Si un flujo se refiere a una terminal (como hace normalmente stdout)  es  de  búfer  de
       línea. La salida estándar de errores stderr siempre es sin búfer por defecto.

       La  función  setvbuf puede emplearse en cualquier flujo abierto para cambiar su búfer.  El parámetro modo
       debe ser una de las tres macros siguientes:

              _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(flujo, (char *)NULL, _IOLBF, 0);

VALOR DEVUELTO

       La  función  setvbuf devuelve 0 en caso de éxito.  Puede devolver cualquier valor si falla, pero devuelve
       un valor distinto de cero cuando mode es inválido o la petición no puede ser  atendida.  Puede  modificar
       errno en caso de fallo.  Las otras funciones no devuelven ningún valor.

CONFORME A

       Las funciones setbuf y setvbuf son conformes al estándar ANSI X3.159-1989 (``C ANSI'').

FALLOS

       Las  funciones  setbuffer  y  setlinebuf  no son transportables a versiones de BSD anteriores a 4.2BSD, y
       están disponibles bajo Linux desde libc 4.5.21. En sistemas 4.2BSD y 4.3BSD,  setbuf  siempre  emplea  un
       tamaño de búfer por debajo del óptimo, y debe ser evitada.

       Ud.  debe  asegurarse  de  que  tanto  buf  como el espacio al que apunte todavía existan cuando flujo se
       cierre, que también ocurre al acabarse el programa.

       Por ejemplo, lo siguiente está mal:

       #include <stdio.h>
       int main()
       {
           auto char buf[BUFSIZ];

           setbuf(stdin, buf);
           printf("¡Hola a todos!\n");
           return 0; /* Se destruye buf, se cierra stdin */
       }

SEE ALSO

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

Linux                                             9 junio 2001                                         SETBUF(3)