Provided by: manpages-de-dev_0.10-1_all bug

BEZEICHNUNG

       setbuf, setvbuf - Stream-Puffer Funktionen

       Diese   Handbuchseite   ist   eventuell   veraltet.   Im   Zweifelsfall   ziehen  Sie  die
       englischsprachige Handbuchseite zu Rate, indem Sie

              man -LC 3 setbuf

       eingeben.

ÜBERSICHT

       #include <stdio.h>

       int setbuf( FILE *stream, char *buf);
       void setbuffer(FILE *stream, char *buf, size_tsize);
       void setlinebuf(FILE *stream);
       int setvbuf( FILE *stream, char *buf, int mode , size_t size);

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  fflush(3)  darf  dazu  verwendet werden, ein Leeren des Puffers zu
       erzwingen. (Siehe auch fclose(3)) Normalerweise sind alle  Dateien  block-gepuffert.  Wenn
       die  erste  I/O-Operation auf einer Datei durchgeführt wird, wird 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 setvbuf wird genutzt, um zu jedem beliebigen Zeitpunkt  die  Pufferung  eines
       geöffneten  Streams  zu  ändern.  Als  mode  -  Parameter  wird  einer  der drei folgenden
       Konstanten verwendet:

              _IONBF Nicht gepuffert

              _IOLBF Zeilenpufferung

              _IOFBF Blockpufferung

       Mit Ausnahme von ungepufferten  Dateien  sollte  mit  buf  ein  Zeiger  auf  einen  Puffer
       angegeben  werden,  der  mindestens  size  Byte  groß ist. Dieser Puffer wird anstelle des
       momentanen  Puffers  verwendet.  Wenn  für  buf  NULL,  angegeben  wird,  wird  nur   mode
       modifiziert.  Bei  der  naechsten  Schreib-  oder  Leseoperation  wird  ein  neuer  Puffer
       allokiert. Die Funktion 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 fflush.

       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 wird anstatt von der  Voreinstellung  BUFSIZ  übernommen  wird.  Die
       Funktion setlinebuf entspricht genau dem folgendem Aufruf:

         setvbuf(stream, (char *)NULL, _IOLBF, 0);

KONFORM ZU

       Die Funktionen setbuf und setvbuf sind konform zu ANSI C3.159-1989 (ANSI C).

Fehler

       Die Funktionen setbuffer und setlinebuf sind keine portablen Versionen von BSD vor 4.2BSD,
       setbuf nutzt immer eine nichtoptimale Puffergröße und sollte deshalb vermieden werden.

       Es muss sichergestellt sein, dass der Puffer buf zu  dem  Zeitpunkt,  zu  dem  der  Stream
       stream geschlossen wird, noch existiert, was ebenfalls bei Programmende geschieht.

       Im  folgenden  Beispiel  wird  der  Stream  stdin  erst  geschlossen  wenn  buf nicht mehr
       existiert. Dieser Code ist nicht zulässig:

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

SIEHE AUCH

       fopen(3), fflush(3), fclose(3), fread(3), malloc(3), puts(3), printf(3).