setbuf
| Определено в заголовке <stdio.h>
|
||
void setbuf( FILE* stream, char* buffer );
|
(до C99) | |
void setbuf( FILE* restrict stream, char* restrict buffer );
|
(начиная с C99) | |
#define BUFSIZ /* unspecified */
|
||
Устанавливает внутренний буфер, используемый для операций с потоком. Он должен быть длиной не менее BUFSIZ символов.
Если buffer не равен null, эквивалентно setvbuf(stream, buffer, _IOFBF, BUFSIZ).
Если buffer равен null, эквивалентно setvbuf(stream, NULL, _IONBF, 0), что отключает буферизацию.
Параметры
| stream | - | файловый поток, для которого устанавливается буфер |
| buffer | - | указатель на буфер для использования потоком. Если передан нулевой указатель, буферизация отключается |
Примечания
Если 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.21.5.5 Функция setbuf (стр.: TBD)
- Стандарт 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
| |