Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_С++_последная.doc
Скачиваний:
40
Добавлен:
07.05.2019
Размер:
876.54 Кб
Скачать

4.2. Понятие файла

Под файлом принято понимать поименованную совокупность данных. Программа получает доступ к файлу посредством обращения к услугам ОС (системным вызовам).

Более широкое понятие файла используется в UNIX-подобных ОС. Поскольку языки С и С++ являются «родными» языками таких систем, в них можно найти отголоски концепций потокового ввода/вывода, перенаправления и буферизации информации. В UNIX-системах под файлом понимается не только пассивный набор данных, но и специальные структуры, связанные с физическими устройствами.

Например: ввод информации с клавиатуры – означает чтение из специального файла связанного со стандартным устройством ввода/вывода. Поэтому от понятия "файл" переходят к понятию "поток", которое является более общим и универсальным. Говоря о направлении информации на устройство или в область для хранения на диске, будем понимать вывод ее в поток, связанный с тем или иным устройством, областью. Точно так же, ввод из файла на диске или с клавиатуры подразумевает чтение информации из потока. По умолчанию будем подразумевать под файлами обычные файлы данных или регулярные файлы.

Как уже отмечалось, в языках С и С++ отсутствуют встроенные средства ввода/вывода, в том числе и для работы с файлами данных. Поэтому для обеспечения доступа к файлам программа использует вызовы функций из стандартных библиотек, которые и производят все необходимые операции.

4.2.1. Строение файлов

Файлы могут иметь сколь угодно сложную организацию с точки зрения программиста и пользователя, но для ОС и программы файл представляет собой простую последовательность байт, оканчивающуюся специальным значением – EOF (End Of File, или Конец Файла).

Таким образом, формирование структуры файла, или ее интерпретация, происходит внутри программы. В этом смысле файл очень напоминает обычный массив данных, расположенный в оперативной памяти. Для доступа к данным внутри файла используется специальный файловый указатель (не путать с указателем на структуру FILE!). Основное отличие массива от набора данных файла заключается в том, что файловый набор является энергонезависимым и сохраняется на устройстве после выключения питания компьютера, в то время как данные в оперативной памяти существуют не дольше, чем время текущего сеанса работы программы. Значение EOF стараются сделать системно-зависимым, поэтому функции посимвольного чтения типа getc(), getchar() возвращают величину не типа char, как естественно ожидать, а int.

4.2.2. Порядок работы с файлом

Независимо от задачи работа с файлом предполагает следующую последовательность действий:

- объявление специальной переменной;

- открытие файла в режиме чтения, записи или добавления;

- изменение положения внутреннего указателя файла;

- запись, чтение или запись и чтение данных;

- закрытие файла.

После открытия файла, как правило, его внутренний указатель установлен в позицию первого байта. После операций чтения или записи значение указателя автоматически увеличивается на величину читаемого или записываемого блока. Указатель можно "двигать" и без операций чтения/записи, устанавливая его значение на любую величину, не превышающую размер файла в байтах. После окончания операций записи/чтения файл необходимо закрыть. Поскольку в системе одновременно может быть открыто небольшое число файлов (это значение задается в файле config.sys строкой FILES=N) и часть открытых файлов принадлежит самой ОС, то становится понятным требование не держать файлы постоянно открытыми, а закрывать их после окончания работы.