setvbuf

Steruje buforowaniem strumienia i rozmiarem buforu.

Składnia

int setvbuf(
   FILE *stream,
   char *buffer,
   int mode,
   size_t size
);

Parametry

stream
Wskaźnik do FILE struktury.

buffer
Bufor przydzielony przez użytkownika.

mode
Tryb buforowania.

size
Rozmiar buforu w bajtach. Dozwolony zakres: 2 <= size<INT_MAX (2147483647). Wewnętrznie podana size wartość jest zaokrąglona w dół do najbliższej wielokrotności 2.

Wartość zwracana

Zwraca wartość 0 w przypadku powodzenia.

Jeśli stream wartość to NULL, lub nie sizemode znajduje się w prawidłowej zmianie, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonanie jest dozwolone do kontynuowania, ta funkcja zwraca wartość -1 i ustawia wartość errnoEINVAL.

Aby uzyskać informacje na temat tych i innych kodów błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Funkcja setvbuf umożliwia programowi kontrolowanie zarówno buforowania, jak i rozmiaru buforu dla programu stream. stream musi odwoływać się do otwartego pliku, który nie przeszedł operacji we/wy, ponieważ został otwarty. Tablica wskazywana buffer przez jest używana jako bufor, chyba że buffer jest NULLto , w którym przypadku setvbuf używa automatycznie przydzielonego buforu długości size/2 * 2 bajtów.

Tryb musi mieć _IOFBFwartość , _IOLBFlub _IONBF. Jeśli mode parametr to _IOFBF lub _IOLBF, size jest używany jako rozmiar buforu. Jeśli mode wartość to _IONBF, strumień jest niebuforowany, a oba size i buffer są ignorowane. Wartości i mode ich znaczenie to:

mode Wartość Znaczenie
_IOFBF Pełne buforowanie; oznacza to, buffer że jest używany jako bufor i size jest używany jako rozmiar buforu. Jeśli buffer jest NULLto , ten tryb używa automatycznie przydzielonego buforu, który jest size długi.
_IOLBF W przypadku niektórych systemów ten tryb zapewnia buforowanie liniowe. Jednak w przypadku win32 zachowanie jest takie samo jak _IOFBF — pełne buforowanie.
_IONBF Nie jest używany bufor, niezależnie od buffer tego, czy size.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek
setvbuf <stdio.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Biblioteki

Wszystkie wersje bibliotek czasu wykonywania języka C.

Przykład

// 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

Zobacz też

We/Wy strumienia
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf