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 size
mode
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ść errno
EINVAL
.
Aby uzyskać informacje na temat tych i innych kodów błędów, zobacz errno
, _doserrno
, _sys_errlist
i _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 NULL
to , w którym przypadku setvbuf
używa automatycznie przydzielonego buforu długości size
/2 * 2 bajtów.
Tryb musi mieć _IOFBF
wartość , _IOLBF
lub _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 NULL to , 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