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 - указатель на буфер для использования потоком. Если указатель равен 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

См. также

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

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

Spec-Zone.ru

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