Le standard du C permet aux flux d'être "bufferisés", c'est à dire que le fonctionnement du flux repose sur une mémoire tampon intermédiaire. Cela optimise les temps nécessaires au traitement des I/O par le système d'exploitation.
Ainsi, le fonctionnement des fonctions standard du C fputs, fwrite, fprintf,..., est normalement bufferisé. Il y a des fonctions standard du C, d'ailleurs, qui permettent de fixer le buffer à utiliser, de modifier le type de buffer ou de le désactiver pour un flux donné :voir setvbuf() et setbuf()
Lorsqu'un flux est ouvert en écriture et qu'il est bufferisé, cela signifie qu'une mémoire tampon est utilisée pour accumuler de façon intermédiaire les caractères à écrire, et qu'ils ne sont écrits (d'un coup) que :
- lorsque le tampon est plein
- ou lorsque le flux est fermé avec fclose(), ou freopen()
- ou le programme s'arrête (sous réserve que son arrêt soit normal)
fflush() permet de forcer l'écriture du contenu du tampon, même si le tampon n'est pas plein, sans fermer le flux, ni le programme.