003
23.12.2003, 22:39 Uhr
0xdeadbeef
Gott (Operator)
|
IO ist normalerweise gebuffert. Das bedeutet, dass der In- bzw. Output vor der weiteren Verarbeitung erstmal in den Speicher der Shell geschrieben wird - man macht das, um die Anzahl langwieriger Hardwarezugriffe zu verringern. Das bedeutet im Klartext, dass printf die Daten nicht sofort an die Grafikkarte schickt, sondern erstmal in einen Buffer schreibt, der beim nächsten Flush (spülen beschreibt es recht gut) an die Graka gesendet wird. Wann der Flush erfolgt, ist systemabhängig.
Warum das so gemacht wird, wird vor allem bei Dateien klar - wenn bei jedem fputc wieder die Festplatte angesprochen würde, wäre IO sehr, sehr, sehr langsam. Mit fflush forcierst du einen Flush, das heißt, die Daten werden sofort an die entsprechende Hardware geschickt - in diesem speziellen Fall erfolgt sofort die Ausgabe auf stdout.
Ich nehme an, dass der Fehler, den du hattest, nicht allein darin bestand, dass die Zeile nicht ausgegeben wurde, sondern dass, bevor etwas ausgegeben wurde, eine Eingabe von dir verlangt wurde. In diesem Fall wurde stdin abgefragt, bevor die Daten auf stdout geschrieben wurden; dazwischen fehlte ein flush, der mit den fflushes, die ich eingefügt habe, erzwungen wird. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |