fflush(3)

Fonction de la bibliothèque C

Force l'écriture des octets qu'un flux de sortie garde en mémoire. Indispensable avant un crash possible ou un fork, sans effet garanti sur stdin.

Synopsis
#include <stdio.h>
int fflush(FILE *stream);

Description

Les flux de <stdio.h>, comme stdout ou un fichier ouvert avec fopen, accumulent ce que tu écris dans un tampon et ne le transmettent au noyau, avec write(2), qu'à certains moments : un \n quand stdout est un terminal, un tampon plein, la fin normale du programme. fflush(flux) transmet tout de suite ce qui attend. fflush(NULL) le fait pour tous les flux de sortie ouverts.

fflush ne vide que le tampon de la bibliothèque C. Une fois les octets passés au noyau, rien ne garantit qu'ils sont déjà sur le disque ; c'est le rôle de fsync.

Valeur de retour

0 en cas de succès. En cas d'erreur, EOF, et errno indique la cause, par exemple EBADF si le flux n'est pas ouvert en écriture.

Pièges

  • fflush(stdin) ne vide pas le clavier. La norme C ne définit fflush que pour les flux de sortie, et POSIX ne l'étend qu'aux fichiers sur disque. Pour jeter la fin d'une ligne tapée, lis-la jusqu'au \n.

  • Un crash ou un abort n'appelle pas fflush à ta place. Depuis glibc 2.27, abort termine le processus sans vider les flux, comme le montre l'exemple.

  • Le texte d'une invite sans \n peut rester invisible pendant une lecture : avec musl, la bibliothèque du terminal des exercices Grademe, stdout n'est pas vidé avant un scanf. Écris fflush(stdout) entre l'invite et la lecture.

  • Avant un fork, vide stdout : sinon le texte en attente est copié dans l'enfant et s'affiche deux fois.

Exemple

avec-fflush.c
#include <stdio.h>#include <stdlib.h>
int main(void){    printf("Sauvegarde en cours...");    fflush(stdout);    abort();}

sans-fflush.c est le même programme sans la ligne 7.

Terminal
$ ./sans-fflushAborted$ ./avec-fflushSauvegarde en cours...Aborted

Sans fflush, le message attendait la fin de sa ligne dans le tampon, et abort l'a fait disparaître. L'article printf n'affiche rien avant un crash détaille les trois modes de tampon.

À toi d'écrire le code.