688_____________________________________________Глава 12

12.9.2 Файловый ввод/вывод с помощью потоков в стиле С

12.9.2.1 Общие сведения

В языках С и C++ файл рассматривается как поток (stream), представляющий
собой последовательность считываемых или записываемых байтов. При этом по-
ток «не знает», что и в какой последовательности в него записано. Расшифровка
смысла записанных последовательностей байтов лежит на программе.

Классический подход, принятый в С, заключается в том, что информация о
потоке (файле) заносится в структуру типа FILE, определенную в файле stdio.h.
Файл открывается с помощью функции fopen, которая возвращает указатель на
структуру типа FILE. Этот указатель потока используется далее во всех операциях
с файлами.

Синтаксис функции fopen:

ttinclude <stdio.h>
FILE *fopen(const char *filename, const char *mode);

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

г         открыть файл только для чтения

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

а         открыть или создать файл для записи данных в конец файла

а+        открыть или создать файл для чтения или записи в конец файла

w         создать файл для записи

w+       создать файл для чтения и записи

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

Открываемый функцией fopen поток буферизуется, т.е. обмен информацией
происходит не непосредственно с файлом, а с промежуточным буфером, располо-
женным в оперативной памяти. Информация переписывается из буфера в файл •п
лько при переполнении буфера или при закрытии файла. В главе 14 в раздел'.
14.12.2 вы можете посмотреть функции, управляющие процессом буферизации.

Функция fopen возвращает указатель на объект, управляющий потоком. Еслг
попытка открыть файл закончилась неудачей, fopen возвращает нулевой указа
тель.

После того, как необходимая работа с файлом (чтение или запись) завершена,
файл должен быть закрыт функцией fclose(FILE *), в которую передается указа-
тель потока.

12.9.2.2 Текстовые файлы

Рассмотрим сначала работу с текстовыми файлами. Открытие текстового фак
ла «Test.txt» может иметь вид: