• 4/2/2020
  • 2 minuti per leggere
    • T
    • v
    • n
    • m
    • c
    • +5

Lancia un flusso.

Sintassi

int fflush( FILE *stream);

Parametri

stream
Pointer alla struttura FILE.

Return Value

fflush ritorna 0 se il buffer è stato lavato con successo. Il valore 0 viene restituito anche nei casi in cui lo stream specificato non ha un buffer o è aperto solo per la lettura. Un valore di ritorno di EOF indica un errore.

Nota

Se fflush ritorna EOF, i dati potrebbero essere stati persi a causa di un errore di scrittura. Quando si imposta un gestore di errori critici, è più sicuro disattivare il buffering con la funzione setvbuf o usare routine di I/O di basso livello come _open, _close e _write invece delle funzioni di I/O del flusso.

Remarks

La funzione fflush pulisce il flusso. Se lo stream è stato aperto in modalità di scrittura, o è stato aperto in modalità di aggiornamento e l’ultima operazione è stata una scrittura, il contenuto del buffer dello stream viene scritto nel file o dispositivo sottostante e il buffer viene scartato. Se lo stream è stato aperto in modalità di lettura, o se lo stream non ha un buffer, la chiamata a fflush non ha effetto, e qualsiasi buffer viene mantenuto. Una chiamata a fflush annulla l’effetto di qualsiasi chiamata precedente a ungetc per il flusso. Lo stream rimane aperto dopo la chiamata.

Se stream è NULL, il comportamento è lo stesso di una chiamata a fflush su ogni stream aperto. Tutti i flussi aperti in modalità di scrittura e tutti i flussi aperti in modalità di aggiornamento dove l’ultima operazione è stata una scrittura vengono lavati. La chiamata non ha effetto su altri flussi.

I buffer sono normalmente mantenuti dal sistema operativo, che determina il momento ottimale per scrivere automaticamente i dati su disco: quando un buffer è pieno, quando un flusso viene chiuso, o quando un programma termina normalmente senza chiudere il flusso. La funzione commit-to-disk della libreria di run-time ti permette di assicurarti che i dati critici siano scritti direttamente su disco piuttosto che nei buffer del sistema operativo. Senza riscrivere un programma esistente, puoi abilitare questa caratteristica collegando i file oggetto del programma con COMMODE.OBJ. Nel file eseguibile risultante, le chiamate a _flushall scrivono il contenuto di tutti i buffer su disco. Solo _flushall e fflush sono influenzati da COMMODE.OBJ.

Per informazioni sul controllo della funzione commit-to-disk, vedi Stream I/O, fopen e _fdopen.

Questa funzione blocca il thread chiamante ed è quindi thread-safe. Per una versione non bloccante, vedete _fflush_nolock.

Per default, lo stato globale di questa funzione è limitato all’applicazione. Per cambiarlo, vedi Stato globale nel CRT.

Requisiti

Funzione Required header
fflush <stdio.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità.

Esempio

// 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;}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.