844 Глава 14

функция	синтаксис / описание	файл
setvbuf	int setvbuf(FILE *stream, char *buf, int type, sizet size)Задает буфер buf размера size для потока stream вместо буфера по умолчанию	stdio.h
tmpfile	FILE *tmpfile(void)Открывает временный двоичный файл для записи и возвращает указатель на связываемую с ним структуру типа FILE или NULL	stdio.h

Комментарии

Открывается файл функцией fopen, в которую передается как параметр стро-
ка с именем файла filename. Аргумент mode указывает на строку, которая опреде-
ляет режим открытия. Она может содержать спецификаторы:

г         открыть файл только для чтения
г+        открыть существующий файл для обновления — чтения и записи
а         открыть или создать файл для записи данных в конец файла
а+        открыть или создать файл для чтения или записи в конец файла

w         создать файл для записи; если такой файл уже существует, он бу-
дет перезаписан

w+        создать файл для обновления — чтения и записи; если такой файл
уже существует, он будет перезаписан

К указанным спецификаторам в конце или перед символом «+» может добав-
ляться символ «t» — текстовый файл, или «b» — бинарный, двоичный файл. На-
пример, rt, rb, r+t, r+b и т.д. Если ни символ «t», ни символ «Ь» не указаны, то
тип открываемого файла определяется значением глобальной переменной _fmode,
определенной в файле fcntl.h. Она может принимать значения 0_ТЕХТ — тексто-
вый файл (по умолчанию) или 0_BINARY — двоичный файл.

. Если открытие файла прошло успешно, функция fopen возвращает указатель
на связываемую с потоком структуру типа FILE. Если произошла ошибка, то воз-
вращается NULL. Типичная процедура открытия файла имеет вид:

FILE *F;

if ((F = fopen("Test.txt", "rt")) == NULL)
(

ShowMessage("Файл не удается открыть");

return;

)

После того, как файл открыт, с ним связывается указатель, определяющий те-
кущую позицию чтения и записи. При каждой операции чтения и записи этот ука-
затель автоматически смещается на величину прочитанного или записанного
поля. Кроме того указатель может смещаться программно с помощью функций
fseek и rewind, описанных в разделе 14.12.4. Однако, если файл открыт для обнов-
ления — чтения и записи, то при работе с ним надо учитывать следующее:

• вывод (запись) не может следовать сразу за вводом (чтением) без предварите-
льной установки указателя явным образом с помощью функций fseek или re-
wind

• ввод не может следовать сразу за выводом без предварительной установки ука-
зателя явным образом с помощью функций fseek или rewind — в противном
случае ввод может неожиданно выдать признак конца файла