setvbuf()

Связать буфер с потоком ввода-вывода

Прототип:

#include <stdio.h>
int setvbuf( FILE *fp,
char *buf,
int mode,
size_t size );

Аргументы:

fp
Поток, который необходимо связать с буфером.
buffer
NULL, либо указатель на буфер.
mode
Способ буферизации потока:
_IOFBF
ввод и вывод полностью буферизуются.
_IOLBF
вывод буферизуется построчно (буфер сбрасывается, когда записывается символ новой строки, когда буфер заполнен или когда запрашивается ввод).
_IONBF
ввод и вывод не буферизуются (сразу же осуществляется вывод).
size
Размер буфера.

Библиотека:

libc

Описание:

Функция setvbuf() связывает буфер с потоком ввода-вывода, указанным в fp. Вызывать функцию setvbuf() следует после открытия потока, но до выполнения операций чтения, записи или поиска.

Если buf не равен NULL, то указанная память будет использоваться вместо автоматически выделенного буфера.

Возвращаемое значение:

0
Успешное завершение.
EINVAL
Аргумент mode некорректен.
ENOMEM
Аргумент buf имеет значение NULL, size не равен 0, но при этом недостаточно памяти для выделения буфера.

Примеры:

#include <stdio.h>
#include <stdlib.h>
int main( void )
{
char *buf;
FILE *fp;
fp = fopen( "file", "r" );
buf = malloc( 1024 );
setvbuf( fp, buf, _IOFBF, 1024 );
/* work with fp */
...
fclose( fp );
/* This is OUR buffer, so we have to free it. Do that AFTER
* you've closed the file.c */
free( buf );
return (EXIT_SUCCESS);
}

Классификация:

ANSI, POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

fopen(), setbuf()




Предыдущий раздел: Описание API системной библиотеки