Namensräume
Varianten
Aktionen

setbuf

Von cppreference.com
< c‎ | io
 
 
Datei-Ein-/Ausgabe
Typen und Objekte
        
Funktionen
Datei-Zugriff
(C95)
Unformatierte Ein-/Ausgabe
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Formatierte Eingabe
Direkte Ein-/Ausgabe
Formatierte Ausgabe
Dateipositionierung
Fehlerbehandlung
Operationen auf Dateien
 
Definiert in Header <stdio.h>
void setbuf( FILE          *stream, char          *buffer );
(bis C99)
void setbuf( FILE *restrict stream, char *restrict buffer );
(seit C99)
#define BUFSIZ     /*nicht spezifiziert*/

Legt den internen Puffer für Stream-Operationen fest. Er sollte mindestens BUFSIZ Zeichen lang sein.

Wenn buffer nicht null ist, ist dies äquivalent zu setvbuf(stream, buffer, _IOFBF, BUFSIZ).

Wenn buffer null ist, ist dies äquivalent zu setvbuf(stream, NULL, _IONBF, 0), was die Pufferung deaktiviert.

Inhalt

[bearbeiten] Parameter

stream - Der zu konfigurierende Dateistream
buffer - Zeiger auf einen Puffer, den der Stream verwenden soll. Wenn ein Nullzeiger übergeben wird, wird die Pufferung deaktiviert.

[bearbeiten] Rückgabewert

Keiner.

[bearbeiten] Hinweise

Wenn BUFSIZ nicht die geeignete Puffergröße ist, kann setvbuf verwendet werden, um dies zu ändern.

setvbuf sollte auch zur Fehlererkennung verwendet werden, da setbuf keinen Erfolg oder Misserfolg anzeigt.

Diese Funktion darf nur verwendet werden, nachdem stream mit einer geöffneten Datei verknüpft wurde, aber bevor eine andere Operation (außer einem fehlgeschlagenen Aufruf von setbuf/setvbuf) ausgeführt wurde.

Ein häufiger Fehler ist das Setzen des Puffers von stdin oder stdout auf ein Array, dessen Lebensdauer vor Programmende endet.

int main(void) {
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior

[bearbeiten] Beispiel

setbuf kann verwendet werden, um die Pufferung für Streams zu deaktivieren, die eine sofortige Ausgabe erfordern.

#include <stdio.h>
#include <threads.h>
 
int main(void)
{
    setbuf(stdout, NULL); // unbuffered stdout
    putchar('a'); // 'a' appears immediately if stdout is unbuffered
    thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec
    putchar('b'); 
}

Ausgabe

ab

[bearbeiten] Referenzen

  • C17-Standard (ISO/IEC 9899:2018)
  • 7.21.5.5 The setbuf function (S. 225)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.21.5.5 The setbuf function (S. 307-308)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.19.5.5 The setbuf function (S. 273)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.9.5.5 The setbuf function

[bearbeiten] Siehe auch

setzt den Puffer und seine Größe für einen Dateistream
(Funktion) [bearbeiten]
C++ Dokumentation für setbuf