Share via


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 modesize 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.

Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno

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 bufferNULL, 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 _IOLBFist, wird size als die Größe des Puffers verwendet. Wenn mode ja, ist _IONBFder 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. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Anforderungen

Routine Erforderlicher Header
setvbuf <stdio.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Bibliotheken

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

Siehe auch

Stream-E/A
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf