setvbuf
Steuert die Streampufferung und die Puffergröße.
Syntax
int setvbuf(
FILE *stream,
char *buffer,
int mode,
size_t size
);
Parameter
stream
Zeiger zur FILE
-Struktur.
buffer
Vom Benutzer zugewiesener Puffer.
mode
Pufferungsmodus.
size
Puffergröße in Bytes. Zulässiger Bereich: 2 <= size
<INT_MAX (2147483647). Der für size
angegebene Wert wird intern auf das nächste Vielfache von 2 abgerundet.
Rückgabewert
Gibt bei Erfolg 0 zurück.
Wenn stream
oder nicht mode
size
innerhalb einer gültigen Änderung enthalten istNULL
, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die Ausführung weiterhin zugelassen wird, gibt diese Funktion -1 zurück und legt errno
auf EINVAL
fest.
Weitere Informationen zu diesen und anderen Fehlercodes finden Sie unter errno
, _doserrno
, _sys_errlist
und _sys_nerr
.
Hinweise
Die setvbuf
-Funktion ermöglicht dem Programm, die Pufferung und die Puffergröße für stream
zu steuern. stream
muss auf eine geöffnete Datei verweisen, die seit dem Öffnen keinen E/A-Vorgang durchlaufen hat. Das Array, auf das buffer
verwiesen wird, wird als Puffer verwendet, es sei denn buffer
NULL
, in diesem Fall setvbuf
wird ein automatisch zugewiesener Puffer der Länge size
/2 * 2 Bytes verwendet.
Der Modus muss _IOFBF
, _IOLBF
oder _IONBF
sein. Wenn mode
_IOFBF
oder _IOLBF
ist, wird size
als die Größe des Puffers verwendet. Wenn mode
ja, ist _IONBF
der Datenstrom nicht gepuffert, und beide size
werden buffer
ignoriert. Werte für mode
und ihre Bedeutung sind:
Wert vom Typ mode |
Bedeutung |
---|---|
_IOFBF |
Vollständige Pufferung; d.h. buffer dient als Puffer und size wird als die Größe des Puffers verwendet. Wenn buffer dies der Fall ist NULL , verwendet dieser Modus einen automatisch zugewiesenen Puffer, der Bytes lang ist size . |
_IOLBF |
Für einige Systeme stellt dieser Modus die Zeilenpufferung bereit. Für Win32 ist das Verhalten jedoch mit _IOFBF – Vollständige Pufferung identisch. |
_IONBF |
Kein Puffer wird verwendet, unabhängig von buffer oder size . |
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Routine | Erforderlicher Header |
---|---|
setvbuf |
<stdio.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Libraries
Alle Versionen der C-Laufzeitbibliotheken.
Beispiel
// crt_setvbuf.c
// This program opens two streams: stream1
// and stream2. It then uses setvbuf to give stream1 a
// user-defined buffer of 1024 bytes and stream2 no buffer.
//
#include <stdio.h>
int main( void )
{
char buf[1024];
FILE *stream1, *stream2;
if( fopen_s( &stream1, "data1", "a" ) == 0 &&
fopen_s( &stream2, "data2", "w" ) == 0 )
{
if( setvbuf( stream1, buf, _IOFBF, sizeof( buf ) ) != 0 )
printf( "Incorrect type or size of buffer for stream1\n" );
else
printf( "'stream1' now has a buffer of 1024 bytes\n" );
if( setvbuf( stream2, NULL, _IONBF, 0 ) != 0 )
printf( "Incorrect type or size of buffer for stream2\n" );
else
printf( "'stream2' now has no buffer\n" );
_fcloseall();
}
}
'stream1' now has a buffer of 1024 bytes
'stream2' now has no buffer