La référence C indique qu'un FILE*
ouvert en mode mise à jour ('+') doit prendre les deux précautions suivantes :
- Une sortie ne peut pas être suivie d'une entrée sans un appel à l'une des fonctions
fflush
,fseek
,fsetpos
ourewind
. - Une entrée ne peut pas être suivie d'une sortie sans un appel à l'une des fonctions
fseek
,fsetpos
ourewind
.
J'ai appris que fflush
suffit pour permettre une entrée après une sortie, car un FILE*
ouvert en mode +
utilise souvent le même tampon pour les opérations de lecture et d'écriture. Par conséquent, ne pas utiliser fflush
avant une entrée pourrait entraîner la lecture erronée de données du tampon (qui n'aurait peut-être pas été vidé, et contient donc des données qui doivent encore être écrites).
Cependant, pour que fseek
, fsetpos
et rewind
obtiennent le même effet, cela implique qu'ils doivent vider internement le tampon du flux qui leur est passé.
Est-ce que la norme C exige que fseek
, fsetpos
et rewind
vident le tampon de leurs flux ? Sinon, pourquoi pas ?