846_____________________________________________Глава 14

Функция setvbuf предоставляет более богатые возможности по управлению
процессом буферизации. В этой функции задание параметра buf = NULL приводит
к выделению в динамически распределяемой памяти с помощью функции nialloc
места для буфера размером size. Этот буфер автоматически освобождает память
при закрытии соответствующего потока. Размер открываемого буфера ограничен
сверху константой UINT_MAX, определенной в файле limits.h.

Параметр type может принимать следующие значения:

_IOFBF  Полная буферизация файла. Когда буфер ввода пуст, очередная опе-
рация ввода пытается заполнить весь буфер. При выводе выдача со-
держимого в файл производится после того, как буфер заполнится
до отказа

_IOLBF  Буферизация строк. Когда буфер ввода пуст, очередная операция

ввода пытается, как и в предыдущем случае, заполнить весь буфер.
Однако при выводе выдача содержимого в файл производится после
того, как в потоке появляется символ новой строки

_IONBF Небуферизованный ввод/вывод. При этом параметры buf и size иг-
норируются

При успешном завершении функция setvbuf возвращает 0.

Файлы, открытые рассмотренными ранее функциями fopen и f reopen, дол-
жны закрываться функцией fclose. При этом автоматически открытые буферы по-
токов освобождают память. Но если буферы назначались явным образом функция-
ми setbuf и setvbuf с параметром buf отличным от NULL, то они автоматически не
освобождают память.

Функция tmpfile открывает временный двоичный файл для записи в режиме
(w+b) и возвращает указатель на связываемую с ним структуру типа FILE. При не-
удаче возвращается NULL. Если после создания временного файла программа не
изменяет текущий каталог, то при завершении программы временный файл авто-
матически удаляется с диска.

Более подробную информацию о работе с файлами типа FILE вы можете найти
в главе 12 в разделе 12.9.2.

14.12.3 Управление потоками и файлами, связанными
с дескрипторами

Управление файлами осуществляется следующими функциями.

функция	синтаксис / описание	файл
close	int close(int handle)Закрывает поток с дескриптором handle	io.h
creat	int creat(const char *path, int mode)Создает новый или переписывает существующий файл в режиме mode; возвращает дескриптор или -1	io.h, sys\stat.h
creatnew	int creatnew(const char *path, int attrib)Аналогична rtlcreat, но выдает ошибку, если файл существует	io.h, dos.h