fflush
Vide un flux.
Syntaxe
int fflush(
FILE *stream
);
Paramètres
stream
Pointeur vers la structure FILE
.
Valeur retournée
fflush
retourne 0 si la mémoire tampon a été vidée correctement. La valeur 0 est également retournée si le flux spécifié n’a aucune mémoire tampon ou est ouvert en lecture seule. Une valeur de retour égale à EOF
indique une erreur.
Remarque
Si fflush
retourne EOF
, des données ont peut-être été perdues en raison d’un échec d’écriture. Quand vous configurez un gestionnaire d’erreurs critiques, la procédure la plus sûre consiste à désactiver la mise en mémoire tampon avec la fonction setvbuf
ou à utiliser des routines E/S de bas niveau comme _open
, _close
et _write
au lieu de fonctions d’E/S de flux.
Notes
La fonction fflush
vide le flux stream
. Si le flux a été ouvert en mode écriture ou s’il a été ouvert en mode mise à jour et que la dernière opération était une écriture, fflush
écrit le contenu de la mémoire tampon de flux dans le fichier ou l’appareil sous-jacent, et la mémoire tampon est ignorée. Si le flux a été ouvert en mode de lecture ou qu’il n’a pas de mémoire tampon, l’appel à fflush
n’a aucun effet, et aucune mémoire tampon n’est conservée. Un appel à fflush
annule l’effet d’un appel antérieur à ungetc
pour le flux. Le flux reste ouvert après l’appel.
Si stream
est NULL
, le comportement est identique à un appel à fflush
sur chaque flux ouvert. Tous les flux ouverts en mode d’écriture et tous les flux ouverts en mode de mise à jour où la dernière opération était une écriture sont vidés. L’appel n’a aucun effet sur les autres flux.
Les mémoires tampons sont normalement gérées par le système d’exploitation, qui détermine à quel moment les données doivent être automatiquement écrites sur le disque : quand une mémoire tampon est saturée, quand un flux est fermé ou quand un programme se termine normalement sans fermer le flux. La fonctionnalité de validation sur disque de la bibliothèque runtime garantit que les données critiques sont écrites directement sur le disque plutôt que dans les mémoires tampons du système d’exploitation. Sans réécrire un programme existant, vous pouvez activer cette fonctionnalité en liant les fichiers objet du programme avec COMMODE.OBJ
. Dans le fichier exécutable résultant, les appels à _flushall
écrivent le contenu de toutes les mémoires tampons sur le disque. Seuls _flushall
et fflush
sont affectés par COMMODE.OBJ
.
Pour plus d’informations sur le contrôle de la fonctionnalité commit-to-disk, consultez Flux d’E/S, fopen
et _fdopen
.
Cette fonction verrouille le thread appelant et est donc thread-safe. Pour une version sans verrouillage, voir _fflush_nolock
.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Spécifications
Fonction | En-tête requis |
---|---|
fflush |
<stdio.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// 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