Función de biblioteca C - setvbuf ()

Descripción

La función de la biblioteca C int setvbuf(FILE *stream, char *buffer, int mode, size_t size) define cómo se debe almacenar en búfer una secuencia.

Declaración

A continuación se muestra la declaración de la función setvbuf ().

int setvbuf(FILE *stream, char *buffer, int mode, size_t size)

Parámetros

  • stream - Este es el puntero a un objeto FILE que identifica una secuencia abierta.

  • buffer- Este es el búfer asignado por el usuario. Si se establece en NULL, la función asigna automáticamente un búfer del tamaño especificado.

  • mode - Esto especifica un modo de almacenamiento en búfer de archivos -

No Señor. Modo y descripción
1

_IOFBF

Full buffering- En la salida, los datos se escriben una vez que el búfer está lleno. En entrada, el búfer se llena cuando se solicita una operación de entrada y el búfer está vacío.

2

_IOLBF

Line buffering- En la salida, los datos se escriben cuando se inserta un carácter de nueva línea en la secuencia o cuando el búfer está lleno, lo que ocurra primero. En la entrada, el búfer se llena hasta el siguiente carácter de nueva línea cuando se solicita una operación de entrada y el búfer está vacío.

3

_IONBF

No buffering- No se utiliza tampón. Cada operación de E / S se escribe lo antes posible. Se ignoran los parámetros de tamaño y búfer.

  • size - Este es el tamaño del búfer en bytes

Valor devuelto

Esta función devuelve cero en caso de éxito; de lo contrario, se devuelve un valor distinto de cero.

Ejemplo

El siguiente ejemplo muestra el uso de la función setvbuf ().

#include <stdio.h>

int main () {
   char buff[1024];

   memset( buff, '\0', sizeof( buff ));

   fprintf(stdout, "Going to set full buffering on\n");
   setvbuf(stdout, buff, _IOFBF, 1024);

   fprintf(stdout, "This is tutorialspoint.com\n");
   fprintf(stdout, "This output will go into buff\n");
   fflush( stdout );

   fprintf(stdout, "and this will appear when programm\n");
   fprintf(stdout, "will come after sleeping 5 seconds\n");

   sleep(5);

   return(0);
}

Compilemos y ejecutemos el programa anterior para producir el siguiente resultado. Aquí el programa sigue almacenando la salida enbuffhasta que se enfrenta a la primera llamada a fflush (), después de lo cual vuelve a comenzar a almacenar en búfer la salida y finalmente duerme durante 5 segundos. Envía la salida restante al STDOUT antes de que salga el programa.

Going to set full buffering on
This is tutorialspoint.com
This output will go into buff
and this will appear when programm
will come after sleeping 5 seconds