Thread Ungepufferte Ausgabe in C
(10 answers)
Opened by J-jayz-Z at 2005-07-05 00:39
Man sollte da unterscheiden zwischen dem Caching, das der Kernel eventuell vornimmt und der Pufferung durch den stdio-Layer. Außerdem sollte man sich gut überlegen welche Funktionen man benutzt, wenn man auf Portabilität Wert legt.
* Die ganze Familie der fopen, fclose, fread, fwrite, fprintf, ... Funktionen ist ANSI-C, wohingegen die open, close, read, write, ... Funktionen nur POSIX-Standard sind. * Verwendet man die low-level POSIX-Funktionen, so hat man natürlich keine Pufferung, verwendet man die ANSI-C stdio-Funktionen, so hat man Pufferung. * Ob die Pufferung standardmäßig für Dateien, die mit fopen geöffnet werden, oder für stdin und stdout aktiv ist, ist systemabhängig. * Auf jeden Fall kann man aber mittels der ANSI-C Funktionen setbuf oder setvbuf die Pufferung durch den stdio-Layer pro FILE * explizit an oder ausschalten. Das sollte auch unter Windoof funktionieren. * fflush verhindert nicht die Pufferung, leert aber die Puffer. Nach jedem Schreibvorgang ein fflush auszuführen, die Pufferung aber zu aktivieren ist also Perls $| = 1 am ähnlichsten. * fcntl ist eine low-level Funktion, die mit Pufferung gar nichts zu tun hat und obendrein extrem unportabel ist. Bei einigen Betriebssystemen kann man allerdings über fcntl-Aufrufe das Caching auf Kernellevel für eine Datei deaktivieren oder eine Synchronisation des Dateisystemes erzwingen. * select hat mit der ganzen Geschichte nun wirklich nichts zu tun. Das ist nur für I/O-Multiplexing gedacht und wird noch manchmal für präzises Timing verwendet. When C++ is your hammer, every problem looks like your thumb.
|