Файловый указатель

Файловые дескрипторы

Файлы. Введение.

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

Так что же такое файл?

Говоря простым языком, файл - это именованный блок информации на вашем диске (или любом другом носителе информации). И хотя файл не обязательно располагается на диске непрерывным блоком, в силу фрагментации файловой системы (см. курс железа/администрирования), для пользователя файл представляется в виде конечной последовательности блока байт (массива). Файла всегда имеет имя (имя не может содержать следующие символы: < > : " / |) и необязательное расширение (по расширению операционная система пытается определить тип файла: текстовый, исполняемый, командный и т. п.). Файл также имеет набор атрибутов, характеризующих его, например, является ли данный файл системным или скрытым. То есть при попытке запуска файла операционная система анализирует его имя (+ полный путь к нему), расширение и атрибуты, а только потом вызывает ответное действие.

Возникает вопрос: а как операционная система "помнит" какие файлы обрабатываются, а какие просто "лежат" на диске? Дело в том, что для обработки файла его необхдимо открыть. При успешном открытии файла операционная система назначает ему уникальное целое число - дескриптор (по-умному HANDLE [хэндл]), и все дальнейшие операции с данным файлом происходят только через дескриптор. При закрытии файла его дескриптор "возвращается" в операционную систему и может использоваться повторно. Проблема отслеживания активных дескрипторов само собой возлагается на операционную систему.

Примечание: библиотека функций языка C для работы с файлами, описанная в следующем разделе, в подавляющем большинстве случаев избавляет вас от необходимости работы с дескрипторами.

Если я считал из файла 5 байт, а потом хочу считать еще 5, не получу ли я в таком случае ту же информацию? Нет, так как файлу назначается специальная переменная, называемая файловым указателем (от слова указывать). Ее задачей является хранение текущей позиции в файле. Таким образом, после считывания 5 байт эта переменная будет хранить число 5, после считывания еще 5 байт - 10. Файловый указатель также смещается и при операциях записи в файл. Если вам необходимо считывать/записывать информацию из/в разных/разные частей/части файла, то можно использовать функции по перемещению файлового указателя в заданную позицию (см. следующий раздел урока).