Типы файлов

Многие операционные системы поддерживают несколько типов файлов. К примеру, в системах UNIX (опять же включая OS X) и Windows имеются обычные файлы и каталоги. В системе UNIX имеются также символьные и блочные специальные файлы.
Обычными считаются файлы, содержащие информацию пользователя. Все файлы на рис. 4.1 являются обычными. Каталоги — это системные файлы, предназначенные для поддержки структуры файловой системы. Мы рассмотрим их чуть позже. Символьные специальные файлы имеют отношение к вводу-выводу и используются для моделирования последовательных устройств ввода-вывода, к которым относятся терминалы, принтеры и сети. Блочные специальные файлы используются для моделирования дисков. В данной главе нас в первую очередь будут интересовать обычные файлы.

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

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

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

Например, на рис. 4.2, а показан простой исполняемый двоичный файл, взятый из одной из ранних версий UNIX. Хотя с технической точки зрения этот файл представляет собой всего лишь последовательность байтов, операционная система исполнит его только в том случае, если он будет иметь допустимый формат. Файл состоит из пяти разделов: заголовка, текста, данных, битов перемещения и таблицы символов. Заголовок начинается с так называемого магического числа, идентифицирующего файл в качестве исполняемого (чтобы предотвратить случайное исполнение файла, не соответствующего данному формату). Затем следуют размеры различных частей файла, адрес, с которого начинается его выполнение, и ряд битов-флагов.

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

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

Каждая операционная система должна распознавать по крайней мере один тип файла — собственный исполняемый файл, но некоторые операционные системы распознают и другие типы файлов. Старая система TOPS-20 (для компьютера DECsystem 20) дошла даже до проверки времени создания каждого предназначенного для выполнения файла. Затем она находила исходный файл и проверяла, не был ли он изменен со времени создания исполняемого файла. Если он был изменен, она автоматически перекомпилировала исходный файл. В терминах UNIX это означает, что программа make была встроена в оболочку. Использование расширений имен файлов было обязательным, чтобы операционная система могла определить, какая двоичная программа от какого исходного файла произошла.

Столь строгая типизация файлов создает проблемы, как только пользователь делает что-нибудь неожиданное для разработчиков системы. Представьте, к примеру, систему, в которой выходные файлы программы имеют расширение .dat (файлы данных). Если пользователь пишет программу форматирования, которая считывает файл с расширением .с (программа на языке C), преобразует его (например, конвертируя в вид со стандартными отступами), а затем записывает преобразованный файл в качестве выходного, то выходной файл приобретает тип .dat. Если пользователь попытается предложить этот файл компилятору C, чтобы тот его откомпилировал, система откажет ему в этом, поскольку у имени файла неверное расширение. Попытки скопировать file. dat в file.c будут отвергнуты системой как недопустимые (чтобы уберечь пользователя от ошибок).


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

4.1.4.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Типы файлов:

  1. смешанные типы
  2. Раздел II. Отдельные типы (виды) договоров
  3. Типы Характеров Человека
  4. 2.3. Типы и методы выборки
  5. ТИПЫ СОЦИАЛЬНЫХ ОТНОШЕНИЙ
  6. Типы энергетических блоков
  7. Типы дат
  8. 3.1.6. Смешанные типы
  9. Смешанные типы
  10. Смешанные типы
  11. 1 3.5.6. Смешанные типы
  12. Смешанные типы .
  13. 3.7.6. Смешанные типы
  14. Смешанные типы