fflushfflush

Vacía una secuencia.Flushes a stream.

SintaxisSyntax

int fflush(
   FILE *stream
);

ParámetrosParameters

misionesstream
Puntero a la estructura FILE.Pointer to FILE structure.

Valor devueltoReturn Value

fflush devuelve 0 si el búfer se ha vaciado correctamente.fflush returns 0 if the buffer was successfully flushed. También se devuelve el valor 0 en los casos en que la secuencia especificada no tiene ningún búfer o solo se abre para lectura.The value 0 is also returned in cases in which the specified stream has no buffer or is open for reading only. Un valor devuelto de EOF indica un error.A return value of EOF indicates an error.

Nota

Si fflush devuelve EOF, es posible que se hayan perdido datos debido a un error de escritura.If fflush returns EOF, data may have been lost due to a write failure. Al configurar un controlador de errores crítico, es más seguro desactivar el almacenamiento en búfer con la función setvbuf ( o usar rutinas de e/s de bajo nivel, como _open, _close y _write en lugar de las funciones de e/s de secuencias.When setting up a critical error handler, it is safest to turn buffering off with the setvbuf function or to use low-level I/O routines such as _open, _close, and _write instead of the stream I/O functions.

ObservacionesRemarks

La función fflush vacía el flujo de la secuencia.The fflush function flushes the stream stream. Si la secuencia se ha abierto en modo de escritura, o se ha abierto en modo de actualización y la última operación ha sido una operación de escritura, el contenido del búfer de la secuencia se escribe en el archivo o dispositivo subyacentes y el búfer se descarta.If the stream was opened in write mode, or it was opened in update mode and the last operation was a write, the contents of the stream buffer are written to the underlying file or device and the buffer is discarded. Si la secuencia se abrió en modo de lectura, o si la secuencia no tiene ningún búfer, la llamada a fflush no tiene ningún efecto y se conserva cualquier búfer.If the stream was opened in read mode, or if the stream has no buffer, the call to fflush has no effect, and any buffer is retained. Una llamada a fflush niega el efecto de cualquier llamada anterior a ungetc para la secuencia.A call to fflush negates the effect of any prior call to ungetc for the stream. La secuencia sigue abierta después de la llamada.The stream remains open after the call.

Si Stream es null, el comportamiento es el mismo que una llamada a fflush en cada flujo abierto.If stream is NULL, the behavior is the same as a call to fflush on each open stream. Se vacían todas las secuencias abiertas en modo de escritura y en modo de actualización en las que la última operación ha sido de escritura.All streams opened in write mode and all streams opened in update mode where the last operation was a write are flushed. La llamada no tiene ningún efecto en otras secuencias.The call has no effect on other streams.

Normalmente, el sistema operativo mantiene los búferes y determina el momento óptimo para escribir los datos automáticamente en el disco: cuando el búfer está lleno, cuando se cierra una secuencia o cuando un programa finaliza con normalidad sin cerrar la secuencia.Buffers are normally maintained by the operating system, which determines the optimal time to write the data automatically to disk: when a buffer is full, when a stream is closed, or when a program terminates normally without closing the stream. La característica de confirmación en disco de la biblioteca en tiempo de ejecución permite asegurarse de que los datos críticos se escriben directamente en el disco y no en los búferes del sistema operativo.The commit-to-disk feature of the run-time library lets you ensure that critical data is written directly to disk rather than to the operating-system buffers. Sin tener que volver a escribir un programa existente, puede habilitar esta característica vinculando los archivos objeto del programa a COMMODE.OBJ.Without rewriting an existing program, you can enable this feature by linking the program's object files with COMMODE.OBJ. En el archivo ejecutable resultante, las llamadas a _flushall escriben el contenido de todos los búferes en el disco.In the resulting executable file, calls to _flushall write the contents of all buffers to disk. COMMODE. OBJ solo afecta a _flushall y fflush .Only _flushall and fflush are affected by COMMODE.OBJ.

Para obtener información sobre cómo controlar la característica de confirmación en disco, consulte E/S de secuencia, fopen y _fdopen.For information about controlling the commit-to-disk feature, see Stream I/O, fopen, and _fdopen.

Esta función bloquea el subproceso de llamada y por lo tanto es segura para subprocesos.This function locks the calling thread and is therefore thread-safe. Para obtener una versión que no sea de bloqueo, consulte _fflush_nolock.For a non-locking version, see _fflush_nolock.

De forma predeterminada, el ámbito de este estado global de esta función es la aplicación.By default, this function's global state is scoped to the application. Para cambiar esto, vea estado global en CRT.To change this, see Global state in the CRT.

RequisitosRequirements

FunciónFunction Encabezado necesarioRequired header
fflushfflush <stdio.h>

Para obtener información adicional sobre compatibilidad, consulte Compatibilidad.For additional compatibility information, see Compatibility.

EjemploExample

// 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;
}
5
User selected 5

Consulte tambiénSee also

E/S de secuenciaStream I/O
fclose, _fcloseallfclose, _fcloseall
_flushall_flushall
setvbufsetvbuf