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 NULL
nebo 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
_doserrno
errno
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
, _IOLBF
nebo _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