Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К_Глава 9_Файловые системы.doc
Скачиваний:
81
Добавлен:
19.05.2015
Размер:
3.66 Mб
Скачать

1.5.Тип файла

Расширение

Во многих случаях желательно связать с файлом – неважно, структурированный ли этот файл или битовый поток – какую-то метаинформацию:в каком формате хранятся данные, какие операции над ним допустимы, а иногда и сведения о том, кому и зачем эти данные нужны. По-видимому, наиболее общим решением этой проблемы был бы объектно-ориентированный подход, в котором файл данных рассматривается как объект, а доступные операции – как методы этого объекта. Ни в одной из известных ОС эта идея в полной мере не реализована, но пользовательские интерфейсы многих современных ОС предоставляют возможность ассоциировать определенные действия с файлами различных типов. Так, напримерExplorer– пользовательская оболочкаWindowsпозволяет связать ту или иную программу с файлами, имеющими расширениеDOC. От ОС при этом требуется только дать возможность каким-то образом различать типы файлов. Первые попытки ассоциировать с файлом признак типа были сделаны еще в 60-е годы. При этом идентификатор типа добавляется к имени файла в виде короткой, но мнемонической последовательности символов –расширения (extention).В большинстве современных ОС расширения отделяются от имени символом “.”, но проследить истоки этой традиции не удалось. При этом, например, файлы на языке С будут иметь расширение «с», на С++ - «С», а документы в форматеLATEX– «tex».

Каскадированное расширение

В ОС семейства Unixимя файла может содержать несколько символов “.”,и, таким образом, файл может иметь несколькокаскадированных расширений. Например, файл “main.C” – это программа на языке С++; “main.C.gz” – это программа написанная на языке С++, упакованная архиваторомGNUZipс целью сэкономить место; “main.C.gz.crypt” – это программа, которую упаковали и потом зашифровали, чтобы никто посторонний не смог ее прочитать; наконец, “main.C.gz.crypt.uue” – это упакованная и зашифрованная программа, преобразованная в последовательность печатаемых символов кодаASCII, например, для пересылки по электронной почте. В принципе, расширения являются вполне приемлемым и во многих отношениях даже очень удобным способом идентификации типа файла. Одно из удобств состоит в том, что для использования этого метода не нужно никаких или почти никаких условий со стороны ОС: просто программы договариваются интерпретировать имя файла определенным образом.

Свободный формат

В ОС нового поколения реализована поддержка имен файла свободного формата, которые могут иметь несколько каскадированных расширений, как и вUnix. Однаконикакие средства операционной системы не могут навязать прикладным программам правил выбора расширения для файлов данных.Это приводит к неприятным коллизиям. Например, почти все текстовые процессоры от Лексикона доWord2000 включительно используют расширение .doc(сокращение отdocument), хотя форматы файлов у различных текстовых процессоров и даже у различных версий одного процессора сильно различаются. Другая проблема связана с исполняемыми загрузочными модулями. Обычно система использует расширение для исполняемых файлов. Так,VMSи системы семействаCP/Mиспользуют расширение .exe: сокращение отexecutable(исполняемый). Однако по мере развития системы формат загрузочного модуля может изменяться. Так, например,OS/2v3.0 поддерживает по крайней мере шесть различных форматов загрузочных модулей. Загрузчик должен уметь правильно распознавать все форматы. При этом он не может использовать расширение файла: файлы всех перечисленных форматов имеют одинаковое расширение EXE.

Магические числа, сигнатуры.

Похожая ситуация имеет место в системах семейства Unix, где бинарные загрузочные модули и командные файлы вообще не имеют расширения. При этом большинство современных версий системы также поддерживает несколько различных исторически сложившихся форматов загрузочного модуля. Разработчики Unixстолкнулись с этой проблемой еще в 70-у годы. В качестве решения они предложили использоватьмагические числа(magicnumber) илисигнатуры (signature- подпись). Первоначально это были численные коды; файл /etc/magicсодержал коды, соответствующие известным типам файлов. Позднее в качестве магических чисел стали использовать длинные текстовые строки. Легко понять, что магические числа ничуть не лучше расширений, а во многих отношениях даже хуже. Например, пользователь, просмотрев содержимое каталога, не может сразу узнать типы содержащихся в нем файлов. Еще хуже ситуация, когда расширение файла не соответствует его реальному типу. Это будет вводить в заблуждение не только пользователя, но и некоторые программы, полагающиеся при определении формата на расширение вместо магического числа.

Другие способы указания типа файла

Пытаясь как-то решить проблему идентификации типа файла, разработчики Macintosh отказались как от расширений, так и от магических чисел. В MacOS каждый файл состоит из двух частей или ветвей (forks): ветви данных (data fork) и ветви ресурсов (resource fork). Кроме идентификатора типа файла, ветвь ресурсов хранит информацию о: значке, связанном с этим файлом; расположении значка в открытой папке (folder); программу, которую нужно запустить при «открытии» этого файла. Еще дальше в этом же направлении пошли разработчики системыOS/2. в этой системе с каждым файлом связан набор расширенных атрибутов(extended attributes).Атрибуты имеют вид «ИМЯ: Значение». При этом значение может быть как текстовый строкой, так и блоком двоичных данных произвольного формата и размера. Некоторые текстовые редакторы применяют расширенные атрибуты для хранения положения курсора при завершении последней серии редактирования, так что пользователь всегда попадает в то место, где он остановился в прошлый раз. Кроме того, расширенные атрибуты могут использоваться и для хранения сведений о назначении файла.