Sdílet prostřednictvím


setvbuf

Řídí ukládání datových proudů do vyrovnávací paměti a velikost vyrovnávací paměti.

Syntaxe

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

Parametry

stream
Ukazatel na FILE strukturu.

buffer
Vyrovnávací paměť přidělená uživatelem.

mode
Režim ukládání do vyrovnávací paměti.

size
Velikost vyrovnávací paměti v bajtech. Povolený rozsah: 2 <= size<= INT_MAX (2147483647). Interně je zaokrouhlená hodnota zaokrouhlená size dolů na nejbližší násobek 2.

Vrácená hodnota

Vrátí hodnotu 0, pokud je úspěšná.

Pokud stream je NULLnebo mode size není v rámci platné změny, vyvolá se neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, vrátí tato funkce hodnotu -1 a nastaví errno hodnotu EINVAL.

Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr . _sys_errlist_doserrnoerrno

Poznámky

Funkce setvbuf umožňuje programu řídit velikost vyrovnávací paměti i velikost vyrovnávací paměti pro stream. stream musí odkazovat na otevřený soubor, který od jeho otevření neprošel vstupně-výstupní operací. Pole, na které buffer odkazuje, se používá jako vyrovnávací paměť, pokud buffer není NULL, v takovém případě setvbuf používá automaticky přidělenou vyrovnávací paměť délky size/2 * 2 bajtů.

Režim musí být _IOFBF, _IOLBFnebo _IONBF. Pokud mode je _IOFBF nebo _IOLBF, pak size se používá jako velikost vyrovnávací paměti. Pokud mode ano _IONBF, stream je bez vyrovnávacího souboru a obě size a buffer jsou ignorovány. Hodnoty pro mode a jejich významy jsou:

mode hodnota Význam
_IOFBF úplné ukládání do vyrovnávací paměti; to znamená, buffer že se používá jako vyrovnávací paměť a size používá se jako velikost vyrovnávací paměti. Pokud buffer ano NULL, tento režim používá automaticky přidělenou vyrovnávací paměť, která je size dlouhá bajty.
_IOLBF U některých systémů tento režim poskytuje ukládání řádků do vyrovnávací paměti. Pro Win32 je ale chování stejné jako _IOFBF – úplné ukládání do vyrovnávací paměti.
_IONBF Není použita žádná vyrovnávací paměť bez ohledu na to buffer , nebo size.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Požadavky

Rutina Požadovaný hlavičkový soubor
setvbuf <stdio.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Knihovny

Všechny verze knihoven runtime jazyka C.

Příklad

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

Viz také

Vstupně-výstupní operace streamu
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf