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

NOMBRE

       setbuf,  setbuffer,  setlinebuf, setvbuf - operaciones sobre buferes 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'ON

       Los tres tipos disponibles de estrategias de asignacion de buferes  son
       sin  bufer,  con bufer de bloque, y con bufer de linea. Cuando un flujo
       de salida esta sin bufer, la  informacion  aparece  en  el  fichero  de
       destino  o  en  la terminal tan pronto como se escribe; cuando esta con
       bufer de bloque se guardan y escriben muchos caracteres como un bloque;
       cuando  esta  con  bufer de linea los caracteres se van guardando hasta
       que se da un salto de linea o si la entrada se lee de  cualquier  flujo
       asociado  a un dispositivo de terminal (normalmente la entrada estandar
       stdin). Se puede emplear la funcion fflush(3) para forzar la  escritura
       del  bloque  mas  pronto  de  la cuenta.  (Vea fclose(3).)  Normalmente
       todos los ficheros son de bufer de bloque.  Cuando  ocurre  la  primera
       operacion  de  E/S  en un fichero, se llama a malloc(3) y se obtiene un
       bufer. Si un flujo se refiere a una  terminal  (como  hace  normalmente
       stdout)  es  de  bufer  de  linea. La salida estandar de errores stderr
       siempre es sin bufer por defecto.

       La funcion setvbuf puede emplearse  en  cualquier  flujo  abierto  para
       cambiar  su  bufer.   El parametro modo debe ser una de las tres macros
       siguientes:

              _IONBF sin bufer

              _IOLBF bufer de linea

              _IOFBF bufer completo

       Salvo para ficheros sin bufer, el argumento buf deberia  apuntar  a  un
       bufer de al menos tam bytes de grande; este bufer se utilizara en lugar
       del actual. Si el argumento buf es NULL, solo el modo se  ve  afectado;
       se  obtendra  un  nuevo  bufer  en  la siguiente operacion de lectura o
       escritura. La funcion setvbuf puede  ser  usada  solamente  despues  de
       abrir  un flujo y antes de que ninguna otra operacion se haya realizado
       sobre el.

       Las otras tres funciones  son,  en  efecto,  simplemente  otras  formas
       simplificadas  de  llamar  a setvbuf.  La funcion setbuf es exactamente
       equivalente a la llamada

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

       La funcion setbuffer es lo mismo, excepto en que el tamano del bufer se
       deja  a  la  discrecion del usuario, en vez de estar determinado por el
       valor  por  omision  BUFSIZ.   La  funcion  setlinebuf  es  exactamente
       equivalente a la llamada:

              setvbuf(flujo, (char *)NULL, _IOLBF, 0);

VALOR DEVUELTO

       La  funcion  setvbuf  devuelve  0  en  caso  de  exito.  Puede devolver
       cualquier valor si falla, pero  devuelve  un  valor  distinto  de  cero
       cuando  mode  es  invalido  o  la peticion no puede ser atendida. Puede
       modificar errno en caso de fallo.  Las  otras  funciones  no  devuelven
       ningun valor.

CONFORME A

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

FALLOS

       Las funciones setbuffer y setlinebuf no son transportables a  versiones
       de  BSD  anteriores a 4.2BSD, y estan disponibles bajo Linux desde libc
       4.5.21. En sistemas 4.2BSD y 4.3BSD, setbuf siempre emplea un tamano de
       bufer por debajo del optimo, y debe ser evitada.

       Ud.  debe  asegurarse  de  que  tanto buf como el espacio al que apunte
       todavia existan cuando flujo se cierre, que tambien ocurre al  acabarse
       el programa.

       Por ejemplo, lo siguiente esta mal:

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

           setbuf(stdin, buf);
           printf("iHola 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)