2009-09-11 6 views

Répondre

7

Même si la mise en mémoire tampon n'est pas un problème, si vous n'imprimez pas la nouvelle ligne, l'invite de votre shell pourrait être en train d'écraser la sortie. Je ne suis pas sûr dans quel environnement vous exécutez ceci, mais si vous utilisez par exemple gcc dans un shell unix et à la fin de votre programme printf ("bonjour") il n'imprimera pas une nouvelle ligne avant que votre invite de shell ne s'affiche. L'invite sera imprimée sur cette même ligne, écrasant parfois toute la ligne en fonction du type d'invite que vous avez configuré.

+0

Seulement si c'est un de ces déviants avec un retour de chariot dedans :-) – paxdiablo

+0

Oui, et même sans retour chariot l'invite sera affichée ajoutée à la dernière ligne de sortie, ce qui en fait Apparaît comme si rien n'était imprimé à une personne non observée. Bien sûr, je n'admets pas être aussi inobservé dans le passé * toux toux * –

14

Appelez l'appel fflush(). En règle générale, l'écriture sur un écran ou un fichier coûte très cher, de sorte que les données sont mises en mémoire tampon jusqu'à ce qu'elles soient écrites. Un \ n est généralement suffisant pour faire le tour (les tampons stockent généralement seulement 1 ligne à la fois de toute façon), mais si vous avez besoin de vider le tampon - utilisez cet appel flush.

+0

Dans, fflush particulier (STDOUT) videra le flux de sortie standard printf utilisations. –

+2

Et rappelez-vous, kiddies, stdout est mis en mémoire tampon par défaut, stderr ne l'est pas. – paxdiablo

+2

BTW, fflush (NULL) videra * tous * les tampons ouverts. – gbjbaanb

2

J'ai posté here à propos unbuffered IO sur les fenêtres ..

mais son un c-appel standard à setvbuf

setvbuf(stdout, (char *)NULL, _IONBF, 0); //unbuffered stdout 
Questions connexes