.\" Copyright (c) 1980, 1991 Regents of the University of California. .\" All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" the American National Standards Committee X3, on Information .\" Processing Systems. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)setbuf.3 6.10 (Berkeley) 6/29/91 .\" .\" Converted for Linux, Mon Nov 29 14:55:24 1993, faith@cs.unc.edu .\" Added section to BUGS, Sun Mar 12 22:28:33 MET 1995, .\" Thomas.Koenig@ciw.uni-karlsruhe.de .\" Translated into german by Roland Krause .\" Fri Jan 12 18:01:33 2001: Modified by Martin Schulze .\" .TH SETBUF 3 "26. Januar 1997" "BSD MANPAGE" "Bibliotheksfunktionen" .SH BEZEICHNUNG setbuf, setvbuf \- Stream-Puffer Funktionen .SH "ÜBERSICHT" .na .B #include .sp .BI "int setbuf( FILE *" stream ", char *" buf ); .br .BI "void setbuffer(FILE *" stream ", char *" buf ", size_t" size ); .br .BI "void setlinebuf(FILE *" stream ); .br .BI "int setvbuf( FILE *" stream ", char *" buf ", int " mode .BI ", size_t " size ); .ad .SH BESCHREIBUNG Die drei Typen der verfügbaren Pufferungen sind nicht-gepuffert, block-gepuffert und zeilen-gepuffert. Wenn ein Ausgabe-Stream ungepuffert 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 Newline-Zeichen gesammelt und erst dann ausgegeben, oder Eingaben wurden von einem beliebigen Datenstrom gelesen, der mit dem Eingabegerät verbunden ist (üblicherweise stdin). Die Funktion .BR fflush (3) darf dazu verwendet werden, ein Leeren des Puffers zu erzwingen. (Siehe auch .BR fclose (3)) Normalerweise sind alle Dateien block-gepuffert. Wenn die erste I/O-Operation auf einer Datei durchgeführt wird, wird .BR malloc (3) aufgerufen und ein Puffer wird angelegt. Wenn ein Datenstrom mit einem Terminal verbunden ist (wie stdout normalerweise), ist er zeilen-gepuffert. Der normale Fehlerstrom (stderr) ist per default immer nicht-gepuffert. Die Funktion .B setvbuf wird genutzt, um zu jedem beliebigen Zeitpunkt die Pufferung eines geöffneten Streams zu ändern. Als .I mode - Parameter wird einer der drei folgenden Konstanten verwendet: .RS .TP .B _IONBF Nicht gepuffert .TP .B _IOLBF Zeilenpufferung .TP .B _IOFBF Blockpufferung .RE .PP Mit Ausnahme von ungepufferten Dateien sollte mit .I buf ein Zeiger auf einen Puffer angegeben werden, der mindestens .I size Byte groß ist. Dieser Puffer wird anstelle des momentanen Puffers verwendet. Wenn für .I buf .BR NULL , angegeben wird, wird nur .I mode modifiziert. Bei der naechsten Schreib- oder Leseoperation wird ein neuer Puffer allokiert. Die Funktion .I setvbuf kann nur dann auf einen geöffneten Stream angewendet werden, wenn er nicht ``aktiv'' ist. Das heißt, vor der ersten Ein- bzw. Ausgabe oder unmittelbar nach einem .BR fflush . Die anderen drei Funktionen sind im Endeffekt einfache Aliase für Aufrufe von .BR setvbuf . Die Funktion .B setbuf entspricht genau dem folgendem Aufruf: .PP setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ); Die Funktion .B setbuffer ist die gleiche, bis auf die Tatsache, dass die Größe des Puffers vom Aufrufer bestimmt wird anstatt von der Voreinstellung .B BUFSIZ übernommen wird. Die Funktion .B setlinebuf entspricht genau dem folgendem Aufruf: .PP setvbuf(stream, (char *)NULL, _IOLBF, 0); .SH KONFORM ZU Die Funktionen .B setbuf und .B setvbuf sind konform zu ANSI C3.159-1989 (ANSI C). .SH Fehler Die Funktionen .B setbuffer und .B setlinebuf sind keine portablen Versionen von BSD vor 4.2BSD, .B setbuf nutzt immer eine nichtoptimale Puffergröße und sollte deshalb vermieden werden. Es muss sichergestellt sein, dass der Puffer .I buf zu dem Zeitpunkt, zu dem der Stream .I stream geschlossen wird, noch existiert, was ebenfalls bei Programmende geschieht. .P Im folgenden Beispiel wird der Stream .I stdin erst geschlossen wenn .I buf nicht mehr existiert. Dieser Code ist nicht zulässig: .nf .sp #include int main() { char buf[BUFSIZ]; setbuf(stdin, buf); printf("Hello, world!\\n"); return 0; } .fi .sp .SH "SIEHE AUCH" .BR fopen (3), .BR fflush (3), .BR fclose (3), .BR fread (3), .BR malloc (3), .BR puts (3), .BR printf (3).