Spec-Zone.ru › C

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

См. также

setvbuf
устанавливает буфер и его размер для файлового потока
(функция)
Документация C++ для setbuf

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/io/setbuf

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API