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 | - | указатель на буфер для использования потоком. Если указатель равен null, буферизация отключается |
Значение результата
Ничего.
Примечания
Если 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
Ссылки
- Стандарт 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/w/c/io/setbuf