setbuf
Определено в заголовочном файле <stdio.h> | ||
|---|---|---|
void setbuf( FILE* stream, char* buffer ); | (до C99) | |
void setbuf( FILE* restrict stream, char* restrict buffer ); | (начиная с C99) | |
#define BUFSIZ /* unspecified */ |
Устанавливает внутренний буфер, используемый для операций с потоком. Его длина должна быть не менее BUFSIZ символов.
Если buffer не является нулевым указателем, эквивалентно setvbuf(stream, buffer, _IOFBF, BUFSIZ).
Если buffer является нулевым указателем, эквивалентно setvbuf(stream, NULL, _IONBF, 0), что отключает буферизацию.
Параметры
| stream | - | файловый поток, для которого устанавливается буфер |
| buffer | - | указатель на буфер, используемый потоком. Если передан нулевой указатель, буферизация отключается. Если указатель не является нулевым, диапазон [buffer, buffer + BUFSIZ) должен быть допустимым |
Примечания
Если BUFSIZ не имеет подходящего размера, для его изменения можно использовать setvbuf.
Для обнаружения ошибок также следует использовать setvbuf, поскольку setbuf не указывает на успешное или неуспешное выполнение.
Эту функцию можно использовать только после того, как stream был связан с открытым файлом, но до выполнения любой другой операции (кроме неудачного вызова setbuf/setvbuf).
Распространённая ошибка — установить для stdin или stdout буфером массив, время жизни которого заканчивается до завершения программы:
int main(void)
{
char buf[BUFSIZ];
setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior
Пример
setbuf можно использовать для отключения буферизации в потоках, которым требуется немедленный вывод.
#include <stdio.h>
#include <threads.h>
int main(void)
{
setbuf(stdout, NULL); // unbuffered stdout
putchar('a'); // 'a' appears immediately if stdout is unbuffered
thrd_sleep(&(struct timespec){ .tv_sec = 1 }, NULL); // sleep 1 sec
putchar('b');
}
Вывод:
ab
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.23.5.5 Функция setbuf (с. 329)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.21.5.5 Функция setbuf (с. 225)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.21.5.5 Функция setbuf (с. 307–308)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.19.5.5 Функция setbuf (с. 273)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 4.9.5.5 Функция setbuf
См. также
| устанавливает буфер и его размер для файлового потока (функция) |
|
Документация C++ для setbuf |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/io/setbuf