• 4/2/2020
  • 2 minutes de lecture
    • T
    • . v
    • n
    • m
    • c
    • +5

Élimine un flux.

Syntaxe

int fflush( FILE *stream);

Paramètres

stream
Pointeur vers la structure FILE.

Valeur de retour

fflush renvoie 0 si le tampon a été vidé avec succès. La valeur 0 est également retournée dans les cas où le flux spécifié n’a pas de tampon ou est ouvert en lecture uniquement. Une valeur de retour de EOF indique une erreur.

Note

Si fflush renvoie EOF, des données peuvent avoir été perdues en raison d’un échec d’écriture. Lors de la mise en place d’un gestionnaire d’erreurs critiques, il est plus sûr de désactiver la mise en mémoire tampon avec la fonction setvbuf ou d’utiliser des routines d’E/S de bas niveau telles que _open, _close, et _write au lieu des fonctions d’E/S de flux.

Remarques

La fonction fflush vide le flux de flux. 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, le contenu du tampon du flux est écrit dans le fichier ou le périphérique sous-jacent et le tampon est jeté. Si le flux a été ouvert en mode lecture, ou si le flux n’a pas de tampon, l’appel à fflush n’a aucun effet, et tout tampon est conservé. Un appel à fflush annule l’effet de tout appel antérieur à ungetc pour le flux. Le flux reste ouvert après l’appel.

Si stream est NULL, le comportement est le même qu’un appel à fflush sur chaque flux ouvert. Tous les flux ouverts en mode écriture et tous les flux ouverts en mode 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 tampons sont normalement maintenus par le système d’exploitation, qui détermine le moment optimal pour écrire automatiquement les données sur le disque : lorsqu’un tampon est plein, lorsqu’un flux est fermé, ou lorsqu’un programme se termine normalement sans fermer le flux. La fonction commit-to-disk de la bibliothèque d’exécution vous permet de vous assurer que les données critiques sont écrites directement sur le disque plutôt que dans les tampons du système d’exploitation. Sans réécrire un programme existant, vous pouvez activer cette fonctionnalité en liant les fichiers objets du programme avec COMMODE.OBJ. Dans le fichier exécutable résultant, les appels à _flushall écrivent le contenu de tous les 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, voir Stream I/O, fopen, et _fdopen.

Cette fonction verrouille le thread appelant et est donc thread-safe. Pour une version non verrouillée, voir _fflush_nolock.

Par défaut, l’état global de cette fonction est scopé à l’application. Pour changer cela, voir État global dans le CRT.

Requirements

Fonction En-tête requis
fflush <stdio.h>

Pour des informations supplémentaires sur la compatibilité, voir Compatibilité.

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

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.