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