Что надо знать чтобы обратиться к данным файла

Обновлено: 17.05.2024

История систем управления данными во внешней памяти начинается еще с магнитных лент, но современный облик они приобрели с появлением магнитных дисков. До этого каждая прикладная программа сама решала проблемы именования данных и их структуризации во внешней памяти . Это затрудняло поддержание на внешнем носителе нескольких архивов долговременно хранящейся информации. Историческим шагом стал переход к использованию централизованных систем управления файлами . Система управления файлами берет на себя распределение внешней памяти , отображение имен файлов в адреса внешней памяти и обеспечение доступа к данным.

Файловая система - это часть операционной системы, назначение которой состоит в том, чтобы организовать эффективную работу с данными, хранящимися во внешней памяти , и обеспечить пользователю удобный интерфейс при работе с такими данными. Организовать хранение информации на магнитном диске непросто. Это требует, например, хорошего знания устройства контроллера диска, особенностей работы с его регистрами. Непосредственное взаимодействие с диском - прерогатива компонента системы ввода-вывода ОС, называемого драйвером диска. Для того чтобы избавить пользователя компьютера от сложностей взаимодействия с аппаратурой, была придумана ясная абстрактная модель файловой системы. Операции записи или чтения файла концептуально проще, чем низкоуровневые операции работы с устройствами.

Основная идея использования внешней памяти состоит в следующем. ОС делит память на блоки фиксированного размера, например, 4096 байт. Файл , обычно представляющий собой неструктурированную последовательность однобайтовых записей, хранится в виде последовательности блоков (не обязательно смежных); каждый блок хранит целое число записей. В некоторых ОС (MS-DOS) адреса блоков, содержащих данные файла , могут быть организованы в связный список и вынесены в отдельную таблицу в памяти. В других ОС (Unix) адреса блоков данных файла хранятся в отдельном блоке внешней памяти (так называемом индексе или индексном узле). Этот прием, называемый индексацией , является наиболее распространенным для приложений, требующих произвольного доступа к записям файлов . Индекс файла состоит из списка элементов, каждый из которых содержит номер блока в файле и сведения о местоположении данного блока. Считывание очередного байта осуществляется с так называемой текущей позиции, которая характеризуется смещением от начала файла . Зная размер блока, легко вычислить номер блока, содержащего текущую позицию. Адрес же нужного блока диска можно затем извлечь из индекса файла . Базовой операцией, выполняемой по отношению к файлу , является чтение блока с диска и перенос его в буфер , находящийся в основной памяти.

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

Перечислим основные функции файловой системы.

  1. Идентификация файлов . Связывание имени файла с выделенным ему пространством внешней памяти .
  2. Распределение внешней памяти между файлами . Для работы с конкретным файлом пользователю не требуется иметь информацию о местоположении этого файла на внешнем носителе информации. Например, для того чтобы загрузить документ в редактор с жесткого диска, нам не нужно знать, на какой стороне какого магнитного диска, на каком цилиндре и в каком секторе находится данный документ.
  3. Обеспечение надежности и отказоустойчивости. Стоимость информации может во много раз превышать стоимость компьютера.
  4. Обеспечение защиты от несанкционированного доступа.
  5. Обеспечение совместного доступа к файлам , так чтобы пользователю не приходилось прилагать специальных усилий по обеспечению синхронизации доступа.
  6. Обеспечение высокой производительности.

Иногда говорят, что файл - это поименованный набор связанной информации, записанной во вторичную память. Для большинства пользователей файловая система - наиболее видимая часть ОС. Она предоставляет механизм для онлайнового хранения и доступа как к данным, так и к программам для всех пользователей системы. С точки зрения пользователя, файл - единица внешней памяти , то есть данные, записанные на диск, должны быть в составе какого-нибудь файла .

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

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

Общие сведения о файлах

Имена файлов

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

Правила именования файлов зависят от ОС. Многие ОС поддерживают имена из двух частей (имя+расширение), например progr.c ( файл , содержащий текст программы на языке Си) или autoexec.bat ( файл , содержащий команды интерпретатора командного языка). Тип расширения файла позволяет ОС организовать работу с ним различных прикладных программ в соответствии с заранее оговоренными соглашениями. Обычно ОС накладывают некоторые ограничения, как на используемые в имени символы, так и на длину имени файла . В соответствии со стандартом POSIX, популярные ОС оперируют удобными для пользователя длинными именами (до 255 символов).

Типы файлов

Важный аспект организации файловой системы и ОС - следует ли поддерживать и распознавать типы файлов . Если да, то это может помочь правильному функционированию ОС, например не допустить вывода на принтер бинарного файла .

Основные типы файлов : регулярные (обычные) файлы и директории (справочники, каталоги ). Обычные файлы содержат пользовательскую информацию. Директории - системные файлы , поддерживающие структуру файловой системы. В каталоге содержится перечень входящих в него файлов и устанавливается соответствие между файлами и их характеристиками ( атрибутами ). Мы будем рассматривать директории ниже.

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

Далее речь пойдет главным образом об обычных файлах.

Обычные (или регулярные) файлы реально представляют собой набор блоков (возможно, пустой) на устройстве внешней памяти , на котором поддерживается файловая система. Такие файлы могут содержать как текстовую информацию (обычно в формате ASCII), так и произвольную двоичную (бинарную) информацию.

Текстовые файлы содержат символьные строки, которые можно распечатать, увидеть на экране или редактировать обычным текстовым редактором.

Другой тип файлов - нетекстовые, или бинарные, файлы . Обычно они имеют некоторую внутреннюю структуру. Например, исполняемый файл в ОС Unix имеет пять секций: заголовок, текст, данные, биты реаллокации и символьную таблицу. ОС выполняет файл , только если он имеет нужный формат. Другим примером бинарного файла может быть архивный файл . Типизация файлов не слишком строгая.

Обычно прикладные программы, работающие с файлами , распознают тип файла по его имени в соответствии с общепринятыми соглашениями. Например, файлы с расширениями .c , .pas , .txt - ASCII-файлы, файлы с расширениями .exe - выполнимые, файлы с расширениями .obj , .zip - бинарные и т. д.

Атрибуты файлов

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

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

Организация файлов и доступ к ним

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

ОС поддерживают несколько вариантов структуризации файлов .

Последовательный файл

Простейший вариант - так называемый последовательный файл . То есть файл является последовательностью записей. Поскольку записи, как правило, однобайтовые, файл представляет собой неструктурированную последовательность байтов.

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

Файл прямого доступа

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

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

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

Таким образом, файл , состоящий из однобайтовых записей на устройстве прямого доступа, - наиболее распространенный способ организации файла . Базовыми операциями для такого рода файлов являются считывание или запись символа в текущую позицию. В большинстве языков высокого уровня предусмотрены операторы посимвольной пересылки данных в файл или из него.

Подобную логическую структуру имеют файлы во многих файловых системах, например в файловых системах ОС Unix и MS-DOS. ОС не осуществляет никакой интерпретации содержимого файла . Эта схема обеспечивает максимальную гибкость и универсальность. С помощью базовых системных вызовов (или функций библиотеки ввода/вывода) пользователи могут как угодно структурировать файлы . В частности, многие СУБД хранят свои базы данных в обычных файлах .

Другие формы организации файлов

Известны как другие формы организации файла , так и другие способы доступа к ним, которые использовались в ранних ОС, а также применяются сегодня в больших мэйнфреймах (mainframe), ориентированных на коммерческую обработку данных.

Другой способ представления файлов - последовательность записей переменной длины, каждая из которых содержит ключевое поле в фиксированной позиции внутри записи (см. рис. 11.1). Базисная операция в данном случае - считать запись с каким-либо значением ключа. Записи могут располагаться в файле последовательно (например, отсортированные по значению ключевого поля) или в более сложном порядке. Метод доступа по значению ключевого поля к записям последовательного файла называется индексно-последовательным.


Рис. 11.1. Файл как последовательность записей переменной длины

В некоторых системах ускорение доступа к файлу обеспечивается конструированием индекса файла . Индекс обычно хранится на том же устройстве, что и сам файл , и состоит из списка элементов, каждый из которых содержит идентификатор записи, за которым следует указание о местоположении данной записи. Для поиска записи вначале происходит обращение к индексу, где находится указатель на нужную запись. Такие файлы называются индексированными, а метод доступа к ним - доступ с использованием индекса.

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


Рис. 11.2. Пример организации индекса для последовательного файла

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

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

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

Чтобы обратиться к данным файла, надо знать адрес первого сектора из тех, в которых хранятся данные файла.

Назовите три координаты, по которым можно определить адрес любого сектора.

номером дорожки (цилиндра), номером поверхности и номером сегмента

Какова схема доступа к данным файла с использованием системных каталогов?

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

Перечислите элементы файловой структуры диска?

Стартовый сектор, таблица размещения файлов, каталог и остающееся свободным пространство памяти диска, называемое областью данных

5. Что происходит с информацией, хранящейся на диске, если производиться операция инициализации?

Какая информация хранится в начальных секторах ЖД?

информация о количестве разделов, их местоположении и размерах

Какая информация хранится в стартовом секторе?

данные, необходимые операционной системе для работы с диском

Где находится стартовый сектор?

2 первые дорожки

9. Где расположена таблица размещения файлов?

За стартовым сектором на диске, начинается с сектора 3 дорожки 0

Что такое блок?

Чему равен объем блока?

Что такое кластер?

Группа секторов на жестком диске,

Чем отличаются непрерывные файлы от фрагментированных?

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

Каково назначение FAT?

хранить данные о местонахождении на диске фрагментов файлов.

Что такое точка входа в FАТ?

В каталоге, содержащем сведения о файлах на диске, для каждого файла указан номер первого кластера, занимаемого файлом.

Каков механизм доступа к файлам с использованием FAT?

Область данных диска рассматривается как последовательность пронумерованных кластеров. Каждому кластеру ставится в соответствие элемент FAT с тем же номером.

Укажите признак свободного кластера.

Если файл удаляется, то занимаемые им кластеры освобождаются и в соответствующие элементы FAT записывается код 000

Укажите признак дефектного кластера.

в процессе форматирования диска система обнаружила на этом участке диска дефекты поверхности, препятствующее нормальному считыванию-записи данных

Укажите признак последнего кластера файла.

отмечен кодом FFF

Что такое корневой каталог?

Каталог, создаваемый операционной системой в процессе инициализации диска

Из чего состоит файл корневого каталога и какую информацию он хранит?

состоит из записей, содержащих сведения о файлах, хранящихся на диске

22. Какой файл считается "спрятанным"?

Если в коде атрибутов файла бит 1 установлен в «1» , информация о спрятанных файлах не выдается на экран при распечатке пользователем содержимого каталога диска по команде DIR

23. Какой файл можно "только читать"?

Если в коде атрибутов файла бит 0 установлен в «1»

Какой файл является системным?

Если в коде атрибутов файла бит 2 установлен в «1»

Что называется меткой диска?

имя, идентифицирующее диск

Что указывает на то, что файл является подкаталогом?

Единица в бите 4 кода атрибутов файла указывает, что данный файл является подкаталогом

27. Какой файл является "архивным"?

Файлы которые имеют ноль в бите 5, кода атрибутов, содержимое 'которых не менялось с момента записи на диск.

От чего зависит размер файла корневого каталога?

Размер фиксирован и зависит от формата физической структуры диска.

Структура доступа к данным жестких дисков.

30. Какой каталог называют "каталогом-отцом"?

Старший каталог по отношению к непосредственно подчиненным ему каталогам называют каталогом-отцом




Положение на диске корневого каталога.

Положение на диске корневого каталога фиксировано и известно операционной системе - он располагается, начиная с секторов, следующих за FAT

Какие сведения может хранить каталог?

имена файлов, сведения о размере файлов, время их создания

Где хранятся данные о местонахождении подкаталогов корневого каталога?

в корневом каталоге

Какие сведения хранит каждый элемент подкаталога?

сведения о файле данных или о файле подчиненного каталога

Ограничен ли размер файла подкаталога?

Где располагается область данных?

вслед за корневым каталогом и занимает все остальное пространство памяти диска.

В каком случае файлы становятся фрагментированными ?

Если файл расширяется или записывается на место ранее удаленного более короткого файла

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

обеспечивается указателями, хранящимися в FAT

Как считать или записать данные в непрерывный файл и во фрагментированный файл?

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

Что подразумевается под операцией сжатия?

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

Что надо знать, чтобы обратиться к данным файла?

Чтобы обратиться к данным файла, надо знать адрес первого сектора из тех, в которых хранятся данные файла.

Назовите три координаты, по которым можно определить адрес любого сектора.

номером дорожки (цилиндра), номером поверхности и номером сегмента

Какова схема доступа к данным файла с использованием системных каталогов?

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

Перечислите элементы файловой структуры диска?

Стартовый сектор, таблица размещения файлов, каталог и остающееся свободным пространство памяти диска, называемое областью данных

5. Что происходит с информацией, хранящейся на диске, если производиться операция инициализации?

Какая информация хранится в начальных секторах ЖД?

информация о количестве разделов, их местоположении и размерах

Какая информация хранится в стартовом секторе?

данные, необходимые операционной системе для работы с диском

Где находится стартовый сектор?

2 первые дорожки

9. Где расположена таблица размещения файлов?

За стартовым сектором на диске, начинается с сектора 3 дорожки 0

Что такое блок?

Чему равен объем блока?

Что такое кластер?

Группа секторов на жестком диске,

Чем отличаются непрерывные файлы от фрагментированных?

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

Каково назначение FAT?

хранить данные о местонахождении на диске фрагментов файлов.

Что такое точка входа в FАТ?

В каталоге, содержащем сведения о файлах на диске, для каждого файла указан номер первого кластера, занимаемого файлом.

Каков механизм доступа к файлам с использованием FAT?

Область данных диска рассматривается как последовательность пронумерованных кластеров. Каждому кластеру ставится в соответствие элемент FAT с тем же номером.

Укажите признак свободного кластера.

Если файл удаляется, то занимаемые им кластеры освобождаются и в соответствующие элементы FAT записывается код 000

Укажите признак последнего кластера файла.

отмечен кодом FFF

Что такое корневой каталог?

Каталог, создаваемый операционной системой в процессе инициализации диска

Что надо знать, чтобы обратиться к данным файла?

Чтобы обратиться к данным файла, надо знать адрес первого сектора из тех, в которых хранятся данные файла.

Для удобства обращения информация в запоминающих устройствах хранится в виде файлов.

Файл – именованная область внешней памяти, выделенная для хранения массива данных. Данные, содержащиеся в файлах, имеют самый разнообразный характер: программы на алгоритмическом или машинном языке; исходные данные для работы программ или результаты выполнения программ; произвольные тексты; графические изображения и т. п.

Каталог ( папка , директория ) – именованная совокупность байтов на носителе информации, содержащая название подкаталогов и файлов, используется в файловой системе для упрощения организации файлов.

Файловой системой называется функциональная часть операционной системы, обеспечивающая выполнение операций над файлами. Примерами файловых систем являются FAT (FAT – File Allocation Table, таблица размещения файлов), NTFS, UDF (используется на компакт-дисках).

Существуют три основные версии FAT: FAT12, FAT16 и FAT32. Они отличаются разрядностью записей в дисковой структуре, т.е. количеством бит, отведённых для хранения номера кластера. FAT12 применяется в основном для дискет (до 4 кбайт), FAT16 – для дисков малого объёма, FAT32 – для FLASH-накопителей большой емкости (до 32 Гбайт).


Рассмотрим структуру файловой системы на примере FAT32.

Файловая структура FAT32

Устройства внешней памяти в системе FAT32 имеют не байтовую, а блочную адресацию. Запись информации в устройство внешней памяти осуществляется блоками или секторами.

Сектор – минимальная адресуемая единица хранения информации на внешних запоминающих устройствах. Как правило, размер сектора фиксирован и составляет 512 байт. Для увеличения адресного пространства устройств внешней памяти сектора объединяют в группы, называемые кластерами.

Кластер – объединение нескольких секторов, которое может рассматриваться как самостоятельная единица, обладающая определёнными свойствами. Основным свойством кластера является его размер, измеряемый в количестве секторов или количестве байт.

Файловая система FAT32

Файловая система FAT32 имеет следующую структуру.

Нумерация кластеров, используемых для записи файлов, ведется с 2. Как правило, кластер №2 используется корневым каталогом, а начиная с кластера №3 хранится массив данных. Сектора, используемые для хранения информации, представленной выше корневого каталога, в кластеры не объединяются.
Минимальный размер файла, занимаемый на диске, соответствует 1 кластеру.

Загрузочный сектор начинается следующей информацией:

  • EB 58 90 – безусловный переход и сигнатура;
  • 4D 53 44 4F 53 35 2E 30 MSDOS5.0;
  • 00 02 – количество байт в секторе (обычно 512);
  • 1 байт – количество секторов в кластере;
  • 2 байта – количество резервных секторов.

Кроме того, загрузочный сектор содержит следующую важную информацию:

  • 0x10 (1 байт) – количество таблиц FAT (обычно 2);
  • 0x20 (4 байта) – количество секторов на диске;
  • 0x2С (4 байта) – номер кластера корневого каталога;
  • 0x47 (11 байт) – метка тома;
  • 0x1FE (2 байта) – сигнатура загрузочного сектора ( 55 AA ).


Сектор информации файловой системы содержит:

  • 0x00 (4 байта) – сигнатура ( 52 52 61 41 );
  • 0x1E4 (4 байта) – сигнатура ( 72 72 41 61 );
  • 0x1E8 (4 байта) – количество свободных кластеров, -1 если не известно;
  • 0x1EС (4 байта) – номер последнего записанного кластера;
  • 0x1FE (2 байта) – сигнатура ( 55 AA ).


Таблица FAT содержит информацию о состоянии каждого кластера на диске. Младшие 2 байт таблицы FAT хранят F8 FF FF 0F FF FF FF FF (что соответствует состоянию кластеров 0 и 1, физически отсутствующих). Далее состояние каждого кластера содержит номер кластера, в котором продолжается текущий файл или следующую информацию:

  • 00 00 00 00 – кластер свободен;
  • FF FF FF 0F – конец текущего файла.


Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:

  • 8 байт – имя файла;
  • 3 байта – расширение файла;


Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:

  • 8 байт – имя файла;
  • 3 байта – расширение файла;
  • 1 байт – атрибут файла:
  • 1 байт – зарезервирован;
  • 1 байт – время создания (миллисекунды) (число от 0 до 199);
  • 2 байта – время создания (с точностью до 2с):
  • 2 байта – дата создания:
  • 2 байта – дата последнего доступа;
  • 2 байта – старшие 2 байта начального кластера;
  • 2 байта – время последней модификации;
  • 2 байта – дата последней модификации;
  • 2 байта – младшие 2 байта начального кластера;
  • 4 байта – размер файла (в байтах).


В случае работы с длинными именами файлов (включая русские имена) кодировка имени файла производится в системе кодировки UTF-16. При этого для кодирования каждого символа отводится 2 байта. При этом имя файла записывается в виде следующей структуры:

  • 1 байт последовательности;
  • 10 байт содержат младшие 5 символов имени файла;
  • 1 байт атрибут;
  • 1 байт резервный;
  • 1 байт – контрольная сумма имени DOS;
  • 12 байт содержат младшие 3 символа имени файла;
  • 2 байта – номер первого кластера;
  • остальные символы длинного имени.

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

Работа с файлами в языке Си

Для программиста открытый файл представляется как последовательность считываемых или записываемых данных. При открытии файла с ним связывается поток ввода-вывода . Выводимая информация записывается в поток, вводимая информация считывается из потока.

Когда поток открывается для ввода-вывода, он связывается со стандартной структурой типа FILE , которая определена в stdio.h . Структура FILE содержит необходимую информацию о файле.

Открытие файла осуществляется с помощью функции fopen() , которая возвращает указатель на структуру типа FILE , который можно использовать для последующих операций с файлом.

  • "r" — открыть файл для чтения (файл должен существовать);
  • "w" — открыть пустой файл для записи; если файл существует, то его содержимое теряется;
  • "a" — открыть файл для записи в конец (для добавления); файл создается, если он не существует;
  • "r+" — открыть файл для чтения и записи (файл должен существовать);
  • "w+" — открыть пустой файл для чтения и записи; если файл существует, то его содержимое теряется;
  • "a+" — открыть файл для чтения и дополнения, если файл не существует, то он создаётся.

Функция fclose() закрывает поток или потоки, связанные с открытыми при помощи функции fopen() файлами. Закрываемый поток определяется аргументом функции fclose() .

Возвращаемое значение: значение 0, если поток успешно закрыт; константа EOF , если произошла ошибка.

Чтение символа из файла:


Аргументом функции является указатель на поток типа FILE . Функция возвращает код считанного символа. Если достигнут конец файла или возникла ошибка, возвращается константа EOF .

Запись символа в файл:

Аргументами функции являются символ и указатель на поток типа FILE . Функция возвращает код считанного символа.

Функции fscanf() и fprintf() аналогичны функциям scanf() и printf() , но работают с файлами данных, и имеют первый аргумент — указатель на файл.

Функции fgets() и fputs() предназначены для ввода-вывода строк, они являются аналогами функций gets() и puts() для работы с файлами.


Копирует строку в поток с текущей позиции. Завершающий нуль- символ не копируется.
Пример Ввести число и сохранить его в файле s1.txt. Считать число из файла s1.txt, увеличить его на 3 и сохранить в файле s2.txt.




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

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

Для дисков с небольшим количеством файлов (до нескольких десятков) может использоваться одноуровневая файловая система , когда каталог (оглавление диска) представляет собой линейную последовательность имен файлов (табл. 1.2). Такой каталог можно сравнить с оглавлением детской книжки, которое содержит только названия отдельных рассказов.

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

Начальный, корневой каталог содержит вложенные каталоги 1-го уровня, в свою очередь, каждый из последних может содержать вложенные каталоги 2-го уровня и так далее. Необходимо отметить, что в каталогах всех уровней могут храниться и файлы.

Например, в корневом каталоге могут находиться два вложенных каталога 1-го уровня (Каталог_1, Каталог_2) и один файл (Файл_1). В свою очередь, в каталоге 1-го уровня (Каталог_1) находятся два вложенных каталога второго уровня (Каталог_1.1 и Каталог_1.2) и один файл (Файл_1.1) - рис. 1.3.

Файловая система - это система хранения файлов и организации каталогов.

Рассмотрим иерархическую файловую систему на конкретном примере. Каждый диск имеет логическое имя (А:, В: - гибкие диски, С:, D:, Е: и так далее - жесткие и лазерные диски).

Пусть в корневом каталоге диска С: имеются два каталога 1-го уровня (GAMES, TEXT), а в каталоге GAMES один каталог 2-го уровня (CHESS). При этом в каталоге TEXT имеется файл proba.txt, а в каталоге CHESS - файл chess.exe (рис. 1.4).

Рис. 1.4. Пример иерархической файловой системы

Путь к файлу . Как найти имеющиеся файлы (chess.exe, proba.txt) в данной иерархической файловой системе? Для этого необходимо указать путь к файлу. В путь к файлу входят записываемые через разделитель "\" логическое имя диска и последовательность имен вложенных друг в друга каталогов, в последнем из которых содержится нужный файл. Пути к вышеперечисленным файлам можно записать следующим образом:

Путь к файлу вместе с именем файла называют иногда полным именем файла.

Пример полного имени файла:

Представление файловой системы с помощью графического интерфейса . Иерархическая файловая система MS-DOS, содержащая каталоги и файлы, представлена в операционной системе Windows с помощью графического интерфейса в форме иерархической системы папок и документов. Папка в Windows является аналогом каталога MS-DOS

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

В Windows на вершине иерархии папок находится папка Рабочий стол. Следующий уровень представлен папками Мой компьютер, Корзина и Сетевое окружение (если компьютер подключен к локальной сети) - рис. 1.5.

Рис. 1.5. Иерархическая структура папок

Если мы хотим ознакомиться с ресурсами компьютера, необходимо открыть папку Мой компьютер.

1. В окне Мой компьютер находятся значки имеющихся в компьютере дисков. Активизация (щелчок) значка любого диска выводит в левой части окна информацию о его емкости, занятой и свободной частях.

Читайте также: