• 4/2/2020
  • 2 minutos para leer
    • T
    • v
    • n
    • m
    • c
    • +5

Limpia una corriente.

Sintaxis

int fflush( FILE *stream);

Parámetros

stream
Puntero a la estructura FILE.

Valor de retorno

fflush devuelve 0 si el buffer se ha vaciado con éxito. El valor 0 también se devuelve en los casos en que el flujo especificado no tiene búfer o está abierto sólo para la lectura. Un valor de retorno EOF indica un error.

Nota

Si fflush devuelve EOF, los datos pueden haberse perdido debido a un fallo de escritura. Cuando se configura un controlador de errores críticos, es más seguro desactivar el almacenamiento en búfer con la función setvbuf o utilizar rutinas de E/S de bajo nivel como _open, _close y _write en lugar de las funciones de E/S del flujo.

Observaciones

La función fflush vacía el flujo. Si el flujo se abrió en modo de escritura, o se abrió en modo de actualización y la última operación fue una escritura, el contenido del búfer del flujo se escribe en el archivo o dispositivo subyacente y el búfer se descarta. Si el flujo se abrió en modo de lectura, o si el flujo no tiene búfer, la llamada a fflush no tiene efecto, y cualquier búfer se conserva. Una llamada a fflush anula el efecto de cualquier llamada anterior a ungetc para el flujo. El flujo permanece abierto después de la llamada.

Si flujo es NULL, el comportamiento es el mismo que una llamada a fflush en cada flujo abierto. Todos los flujos abiertos en modo de escritura y todos los flujos abiertos en modo de actualización donde la última operación fue una escritura son vaciados. La llamada no tiene efecto en otros flujos.

Los buffers son normalmente mantenidos por el sistema operativo, que determina el momento óptimo para escribir los datos automáticamente en el disco: cuando un buffer está lleno, cuando un flujo se cierra, o cuando un programa termina normalmente sin cerrar el flujo. La función «commit-to-disk» de la biblioteca en tiempo de ejecución permite garantizar que los datos críticos se escriban directamente en el disco y no en los búferes del sistema operativo. Sin reescribir un programa existente, puede activar esta función enlazando los archivos de objetos del programa con COMMODE.OBJ. En el archivo ejecutable resultante, las llamadas a _flushall escriben el contenido de todos los buffers en el disco. Sólo _flushall y fflush se ven afectados por COMMODE.OBJ.

Para obtener información sobre el control de la función commit-to-disk, consulte Stream I/O, fopen, y _fdopen.

Esta función bloquea el hilo de llamada y por lo tanto es seguro para el hilo. Para una versión sin bloqueo, vea _fflush_nolock.

Por defecto, el estado global de esta función es de alcance para la aplicación. Para cambiar esto, vea Estado global en la CRT.

Requisitos

Función Cabecera requerida
fflush <stdio.h>

Para información adicional sobre compatibilidad, véase Compatibilidad.

Ejemplo

// crt_fflush.c// Compile with: cl /W4 crt_fflush.c// This sample gets a number from the user, then writes it to a file.// It ensures the write isn't lost on crash by calling fflush.#include <stdio.h>int * crash_the_program = 0;int main(void){ FILE * my_file; errno_t err = fopen_s(&my_file, "myfile.txt", "w"); if (my_file && !err) { printf("Write a number: "); int my_number = 0; scanf_s("%d", &my_number); fprintf(my_file, "User selected %d\n", my_number); // Write data to a file immediately instead of buffering. fflush(my_file); if (my_number == 5) { // Without using fflush, no data was written to the file // prior to the crash, so the data is lost. *crash_the_program = 5; } // Normally, fflush is not needed as closing the file will write the buffer. // Note that files are automatically closed and flushed during normal termination. fclose(my_file); } return 0;}

Deja una respuesta

Tu dirección de correo electrónico no será publicada.