fflush
Svuota un flusso.
int fflush(
FILE *stream
);
Parametri
- stream
Puntatore alla struttura FILE.
Valore restituito
fflush restituisce 0 se il buffer è stato svuotato correttamente. Il valore 0 viene restituito anche nei casi in cui il flusso specificato non presenta buffer o è aperto in sola lettura. Un valore restituito EOF indica un errore.
Nota
Se fflush restituisce EOF, i dati possono venire persi a causa di un errore di scrittura.Quando si installa un gestore di errori critici, è consigliabile disattivare la memorizzazione nel buffer con la funzione setvbuf o utilizzare le routine di I/O di basso livello come _open, _close e _write anziché le funzioni del flusso di I/O.
Note
La funzione fflush svuota un flusso. Se il file associato a stream viene aperto per l'output, fflush scrive in questo file il contenuto del buffer associato al flusso. Se il flusso viene aperto per l'input, fflush elimina il contenuto del buffer. fflush annulla l'effetto di qualsiasi chiamata precedente a ungetc sullo stream. Inoltre, fflush(NULL) svuota tutti i flussi aperti per l'output. Il flusso rimane aperta dopo la chiamata. fflush non ha effetto su un flusso privo di buffer.
I buffer sono normalmente gestiti dal sistema operativo, il quale determina il momento ottimale per scrivere automaticamente i dati sul disco: quando un buffer è pieno, quando un flusso viene chiuso, o quando un programma termina normalmente senza chiudere il flusso. La funzionalità di commit su disco della libreria di run-time consente di assicurare che i dati critici vengano scritti direttamente su disco anziché nei buffer del sistema operativo. Senza riscrivere un programma esistente, è possibile abilitare questa funzionalità collegando i file oggetto del programma a COMMODE.OBJ. Nel file eseguibile risultante, le chiamate a _flushall scrivono il contenuto di qualsiasi buffer sul disco. Solo _flushall e fflush sono interessati da COMMODE.OBJ.
Per informazioni sul controllo della funzionalità del commit da disco, consultare Flusso I/O, fopen e _fdopen.
Questa funzione blocca il thread chiamante quindi è thread-safe. Per una versione non bloccante, vedere _fflush_nolock.
Requisiti
Funzione |
Intestazione obbligatoria |
---|---|
fflush |
<stdio.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'Introduzione.
Esempio
// crt_fflush.c
#include <stdio.h>
#include <conio.h>
int main( void )
{
int integer;
char string[81];
// Read each word as a string.
printf( "Enter a sentence of four words with scanf: " );
for( integer = 0; integer < 4; integer++ )
{
scanf_s( "%s", string, sizeof(string) );
printf( "%s\n", string );
}
// You must flush the input buffer before using gets.
// fflush on input stream is an extension to the C standard
fflush( stdin );
printf( "Enter the same sentence with gets: " );
gets_s( string, sizeof(string) );
printf( "%s\n", string );
}
This is a test This is a test
FakePre-13416639e6234b86847eb7deac5c26c8-395eabce0aa446118b27b18e7a11198b