BEZEICHNUNG
setbuf, setbuffer, setlinebuf, setvbuf - Pufferaktionen für StreamsBIBLIOTHEK
Standard-C-Bibliothek ( libc, -lc)ÜBERSICHT
#include <stdio.h>
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 älter: _BSD_SOURCE
BESCHREIBUNG
Die drei verfügbaren 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 Endgerät verbunden ist (üblicherweise stdin). Die Funktion fflush(3) darf dazu verwendet werden, ein frühes 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 standardmäßig immer nicht gepuffert. Die Funktion setvbuf() wird genutzt, um zu jedem beliebigen Zeitpunkt die Pufferung eines geöffneten Streams zu ändern. Als Parameter Modus wird eine der drei folgenden Konstanten verwendet:- _IONBF
- nicht gepuffert
- _IOLBF
- Zeilenpufferung
- _IOFBF
- voll gepuffert
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
Die Funktion setbuffer() ist die gleiche, bis auf die Tatsache, dass die Größe des Puffers vom Aufrufer bestimmt anstatt von der Voreinstellung BUFSIZ übernommen wird. Die Funktion setlinebuf() entspricht genau dem folgendem Aufruf:
setvbuf(stream, NULL, _IOLBF, 0);
RÜCKGABEWERT
Die Funktion setvbuf() gibt bei Erfolg 0 zurück. Sie gibt im Fehlerfall ( Modus ist ungültig oder der Anfrage kann nicht genügt werden) ungleich Null zurück und darf dann errno setzen. Die anderen Funktionen liefern keinen Wert zurück.ATTRIBUTE
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.Schnittstelle | Attribut | Wert |
setbuf(), setbuffer(), setlinebuf(), setvbuf() | Multithread-Fähigkeit | MT-Safe |
STANDARDS
Die Funktionen setbuf() und setvbuf() sind zu C99 konform.ANMERKUNGEN
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 verändert haben muss.FEHLER
Sie müssen sicherstellen, dass der Puffer zu dem Zeitpunkt, zu dem der Stream datenstrom geschlossen wird, noch existiert, was ebenfalls bei Programmende geschieht.#include <stdio.h> int main(void) { char buf[BUFSIZ]; setbuf(stdout, buf); printf("Hallo, Welt!\n"); return 0; }
SIEHE AUCH
stdbuf(1), fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3)ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <[email protected]> und Helge Kreutzmann <[email protected]> erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer5. Februar 2023 | Linux man-pages 6.03 |