Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Управляет потоковой буферизацией и размером буфера.
Синтаксис
int setvbuf(
FILE *stream,
char *buffer,
int mode,
size_t size
);
Параметры
stream
Указатель на структуру FILE .
buffer
Выделенный пользователем буфер.
mode
Режим буферизации.
size
Размер буфера в байтах. Допустимый диапазон: 2 <= size<INT_MAX (2147483647). На внутреннем уровне значение, указанное для size, округляется вниз до ближайшего числа, кратного 2.
Возвращаемое значение
Возвращает 0 в случае успеха.
Если stream значение NULLравно или size mode нет в допустимом изменении, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если продолжение выполнения разрешено, эта функция возвращает –1 и задает для errno значение EINVAL.
Дополнительные сведения об этих и других кодах ошибок см. в разделе errno, _doserrno_sys_errlistи _sys_nerr.
Замечания
Функция setvbuf позволяет программе управлять и буферизацией, и размером буфера для stream. stream должен ссылаться на открытый файл, который не прошел операцию ввода-вывода после открытия. Массив, на который указываетbuffer, используется в качестве буфера, если buffer только не используется setvbuf NULLавтоматически выделенный буфер длины size/2 * 2 байта.
Должен быть установлен режим _IOFBF, _IOLBF, или _IONBF. Если mode имеет значение _IOFBF или _IOLBF, то size используется в качестве размера буфера. Если mode это _IONBFтак, поток не учитывается, и оба size и buffer игнорируются. Переменные для функции mode и их значения:
Значение mode |
Значение |
|---|---|
_IOFBF |
Полная буферизация; то есть buffer используется в качестве буфера и size используется в качестве размера буфера. Если buffer это NULLтак, этот режим использует автоматически выделенный буфер, который имеет size длину байтов. |
_IOLBF |
Для некоторых систем этот режим обеспечивает буферизацию строк. Однако для Win32 такое поведение аналогично _IOFBF, то есть полной буферизации. |
_IONBF |
Буфер не используется, независимо от функций buffer или size. |
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
| Маршрут | Обязательный заголовок |
|---|---|
setvbuf |
<stdio.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Библиотеки
Все версии библиотек времени выполнения языка C.
Пример
// 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
См. также
Потоковый ввод-вывод
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf