SETBUF(3)

BEZEICHNUNG
setbuf, setbuffer, setlinebuf, setvbuf - Pufferoperationen für Streams

ÜBERSICHT
#include <stdio.h>
void setbuf(FILE *stream, char *buf);
void setbuffer(FILE *stream, char *buf, size_t size);
void setlinebuf(FILE *stream);
int setvbuf(FILE *stream, char *buf, int mode, size_t size);

Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

setbuffer(), setlinebuf(): _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 die erste E/A-Operation auf einer Datei durchgeführt wird, wird malloc(3) aufgerufen und ein Puffer angelegt. 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 wird mode wird eine der drei folgenden Konstanten verwendet:

    _IONBF
        nicht gepuffert

    _IOLBF
        Zeilenpufferung

    _IOFBF
        voll gepuffert

Mit Ausnahme von ungepufferten Dateien sollte mit dem Argument buf ein Zeiger auf einen Puffer angegeben werden, der mindestens size Byte groß ist. Dieser Puffer wird anstelle des aktuellen Puffers verwendet. Wenn für buf NULL angegeben wird, ist nur der Modus betroffen; bei der nächsten Schreib- oder Leseoperation wird ein neuer Puffer reserviert. Die Funktion setvbuf() darf nur dann angewendet werden, nachdem ein Stream geöffnet wurde und bevor irgendwelche anderen Operationen darauf ausgeführt wurden.

Die anderen drei Funktionen sind im Endeffekt einfache Aliase für 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 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 (mode ist ungültig oder der Anfrage kann nicht genügt werden) ungleich Null zurück und darf dann errno setzen. Die anderen Funktionen geben keinen Wert zurück.

ATTRIBUTE

  Multithreading (siehe pthreads(7))
Die Funktionen setbuf(), setbuffer(), setlinebuf() und setvbuf() sind multithread-fähig.

KONFORM ZU
Die Funktionen setbuf() und setvbuf() sind konform zu C89 und C99.

FEHLER

Sie müssen sicherstellen, dass der Puffer buf zu dem Zeitpunkt, zu dem der Stream stream geschlossen wird, noch existiert, was ebenfalls bei Programmende geschieht.

#include <stdio.h>
int
main(void)
{
    char buf[BUFSIZ];
    setbuf(stdin, buf);
    printf("Hallo, Welt!\n");
    return 0;
}

SIEHE AUCH
fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3)

KOLOPHON
This page is part of release 3.80 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> 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 <debian-l10n-german@lists.debian.org>.