Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ří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