setbuf
| 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 /* unspecified */
|
||
Setzt den internen Puffer, der für Stream-Operationen verwendet werden soll. Er sollte mindestens BUFSIZ Zeichen lang sein.
Falls buffer nicht null ist, äquivalent zu setvbuf(stream, buffer, _IOFBF, BUFSIZ).
Falls buffer null ist, äquivalent zu setvbuf(stream, NULL, _IONBF, 0), was die Pufferung abschaltet.
Parameter
| stream | - | der Dateistream, für den der Puffer gesetzt werden soll |
| buffer | - | Zeiger auf einen Puffer, den der Stream verwenden soll. Wenn ein Nullzeiger übergeben wird, wird die Pufferung deaktiviert |
Hinweise
Falls BUFSIZ nicht die geeignete Puffergröße ist, kann setvbuf verwendet werden, um sie 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 vor jeder anderen Operation (außer einem fehlgeschlagenen Aufruf von setbuf/setvbuf).
Ein häufiger Fehler ist, den Puffer von stdin oder stdout auf ein Array zu setzen, dessen Lebensdauer vor Programmende endet:
int main(void)
{
char buf[BUFSIZ];
setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior
Beispiel
setbuf kann verwendet werden, um die Pufferung auf Streams zu deaktivieren, die 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
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
- 7.21.5.5 Die setbuf-Funktion (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
- 7.21.5.5 Die setbuf-Funktion (S.: 225)
- C11-Standard (ISO/IEC 9899:2011):
- 7.21.5.5 Die setbuf-Funktion (S.: 307-308)
- C99-Standard (ISO/IEC 9899:1999):
- 7.19.5.5 Die setbuf-Funktion (S.: 273)
- C89/C90-Standard (ISO/IEC 9899:1990):
- 4.9.5.5 Die setbuf-Funktion
Siehe auch
| setzt den Puffer und seine Größe für einen Dateistream (Funktion) | |
C++-Dokumentation für setbuf
| |