Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

setvbuf - Puffer einem Datenstrom zuweisen

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

int setvbuf(FILE *stream, char *buf, int type, size_t size);

Beschreibung

setvbuf() kann verwendet werden, nachdem der Datenstrom, auf den stream zeigt, einer offenen Datei zugeordnet wurde, aber bevor eine andere Operation auf dem Datenstrom ausgeführt wird. setvbuf() bewirkt, dass das Feld, auf das buf zeigt, an Stelle eines automatisch zugewiesenen Puffers verwendet wird. Wenn buf der Nullzeiger ist, sind Ein- und Ausgaben völlig ungepuffert.

type bestimmt folgendermaßen, wie stream gepuffert werden soll:

_IOFBF

sorgt für vollständige Pufferung der Ein- und Ausgaben.

_IOLBF

sorgt für zeilenweise Pufferung.

_IONBF

sorgt für ungepufferte Ein- und Ausgaben.

Wenn buf nicht der Nullzeiger ist, kann der Vektor, auf den buf zeigt, an Stelle eines von setvbuf() reservierten Puffers verwendet werden.

size gibt die Größe des buf-Vektors an.

Der Inhalt des buf-Vektors ist zu jeder Zeit unbestimmt.

Returnwert

0

bei Erfolg.

 

!= 0

wenn ein ungültiger Wert für type angegeben wurde oder wenn die Anforderung nicht ausgeführt werden kann. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

setvbuf() schlägt fehl, wenn gilt:


EBADF

Der stream zu Grunde liegende Dateideskriptor ist ungültig.

Hinweise

Eine häufige Fehlerquelle besteht darin, dass als Puffer in einem Programmblock eine Variable der Speicherklasse auto verwendet und die Datei in diesem Block dann nicht geschlossen wird.

Teile von buf werden für interne Verwaltungsinformationen des Datenstroms benötigt, deswegen enthält buf weniger als size Bytes, wenn er voll ist. setvbuf() sollte automatisch zugewiesene Puffer verwenden.

Wenn man mit setvbuf() Speicherbereich der Größe size zuweist, bedeutet das nicht automatisch, dass alle size Bytes für den Speicherbereich gebraucht werden.

Anwendungen sollten beachten, dass viele Implementierungen nur zeilenweises Puffern von Terminal-Gerätedateien unterstützen.

setvbuf() wird für die Datei ausgeführt, die stream zugeordnet ist. Die kann eine POSIX-oder BS2000-Datei sein.

BS2000
Wird der Blockungsfaktor mit dem BUFFER-LENGTH-Parameter des ADD-FILE-LINK-Kom-mandos explizit vereinbart, muss die Größe des Bereichs dieser vereinbarten Blockungsgröße entsprechen. (Ende)

Siehe auch

fopen(), setbuf(), stdio.h, Abschnitt "Datenströme“.