setbuf(3) Library Functions Manual setbuf(3) BEZEICHNUNG setbuf, setbuffer, setlinebuf, setvbuf - Pufferaktionen fur Streams BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int setvbuf(FILE *restrict datenstrom, char Puffer[restrict .groesse], int Modus, size_t groesse); void setbuf(FILE *restrict datenstrom, char *restrict Puffer); void setbuffer(FILE *restrict datenstrom, char buf[restrict .groesse], size_t groesse); void setlinebuf(FILE *datenstrom); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): setbuffer(), setlinebuf(): Seit Glibc 2.19: _DEFAULT_SOURCE Glibc 2.19 und alter: _BSD_SOURCE BESCHREIBUNG Die drei verfugbaren Typen von Pufferungen sind nicht gepuffert, block-gepuffert und zeilen-gepuffert. Wenn ein Ausgabe-Stream nicht gepuffert ist, erscheinen die Informationen in der Zieldatei oder auf dem Terminal direkt nachdem sie geschrieben wurden. Wenn die Ausgabe block-gepuffert ist, werden viele Zeichen erst einmal gesammelt und dann in einem Rutsch ausgegeben. Wenn die Ausgabe zeilen-gepuffert ist, werden die Zeichen bis zu einem Zeilenvorschub-Zeichen gesammelt und erst dann ausgegeben, oder Eingaben wurden von einem beliebigen Datenstrom gelesen, der mit einem Endgerat verbunden ist (ublicherweise stdin). Die Funktion fflush(3) darf dazu verwendet werden, ein fruhes Leeren des Puffers zu erzwingen (siehe auch fclose(3)). Normalerweise sind alle Dateien block-gepuffert. Wenn ein Datenstrom mit einem Terminal verbunden ist (wie bei stdout normalerweise der Fall), ist er zeilen-gepuffert. Der Standardfehlerstrom (stderr) ist standardmassig immer nicht gepuffert. Die Funktion setvbuf() wird genutzt, um zu jedem beliebigen Zeitpunkt die Pufferung eines geoffneten Streams zu andern. Als Parameter Modus wird eine der drei folgenden Konstanten verwendet: _IONBF nicht gepuffert _IOLBF Zeilenpufferung _IOFBF voll gepuffert Mit Ausnahme von ungepufferten Dateien sollte mit dem Argument Puffer ein Zeiger auf einen Puffer angegeben werden, der mindestens groesse Byte gross ist. Dieser Puffer wird anstelle des aktuellen Puffers verwendet. Wenn fur Puffer NULL angegeben wird, ist nur der Modus betroffen; bei der nachsten Schreib- oder Leseaktion wird ein neuer Puffer reserviert. Die Funktion setvbuf() darf nur dann angewendet werden, nachdem ein Stream geoffnet wurde und bevor irgendwelche anderen Aktionen darauf ausgefuhrt wurden. Die anderen drei Funktionen sind im Endeffekt einfache Aliase fur Aufrufe von setvbuf(). Die Funktion setbuf() entspricht genau dem folgendem Aufruf: setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ); Die Funktion setbuffer() ist die gleiche, bis auf die Tatsache, dass die Grosse des Puffers vom Aufrufer bestimmt anstatt von der Voreinstellung BUFSIZ ubernommen wird. Die Funktion setlinebuf() entspricht genau dem folgendem Aufruf: setvbuf(stream, NULL, _IOLBF, 0); RUCKGABEWERT Die Funktion setvbuf() gibt bei Erfolg 0 zuruck. Sie gibt im Fehlerfall (Modus ist ungultig oder der Anfrage kann nicht genugt werden) ungleich Null zuruck und darf dann errno setzen. Die anderen Funktionen liefern keinen Wert zuruck. ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +--------------------------------+-------------------------+-----------+ |Schnittstelle | Attribut | Wert | +--------------------------------+-------------------------+-----------+ |setbuf(), setbuffer(), | Multithread-Fahigkeit | MT-Sicher | |setlinebuf(), setvbuf() | | | +--------------------------------+-------------------------+-----------+ STANDARDS setbuf() setvbuf() C11, POSIX.1-2008. GESCHICHTE setbuf() setvbuf() C89, POSIX.1-2001. WARNUNGEN POSIX vermerkt, dass der Wert von errno nach einem Aufruf von setbuf() nicht spezifiziert ist und merkt weiterhin an, dass Anwendungen stattdessen setvbuf() verwenden sollten, um Fehler zu erkennen, da der Wert von errno sich nach einem erfolgreichen Aufruf von setbuf() nicht verandert haben muss. FEHLER Sie mussen sicherstellen, dass der Puffer zu dem Zeitpunkt, zu dem der Stream datenstrom geschlossen wird, noch existiert, was ebenfalls bei Programmende geschieht. #include int main(void) { char buf[BUFSIZ]; setbuf(stdout, buf); printf("Hello, world!\n"); return 0; } SIEHE AUCH stdbuf(1), fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer , Helge Kreutzmann und Mario Blattermann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 setbuf(3)