Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Тип файла



Расширение

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

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

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

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

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

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

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

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

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





Дата публикования: 2015-01-23; Прочитано: 216 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...