* В стародавние времена ОСей было много, и все разные. Каждый производитель ЭВМ писал для неё с нуля свою ОС, и его совершенно не заботила программная совместимость с ОС других производителей -- если нет аппаратной совместимости, то и программная ни к чему.
* В компьютерах от Digital -- PDP и произошедшем от него VAX -- использовалась необычная система путей (на примере VMS):
- Код: Выделить всё
SYS$SYSDEVICE:[VMS$COMMON.DTR.DTR$LIB]JPI_CODES_TAB.DTR;1
- Здесь:
SYS$SYSDEVICE -- название диска. Диском может быть объявлен любой каталог, примерно как командой subst в DOS;
VMS$COMMON.DTR.DTR$LIB -- путь, разделяемый точкой;
JPI_CODES_TAB.DTR -- имя файла и 1 -- его версия.
Поддержка нескольких версий одного файла и переключение между ними было встроено в ОС.
Файлу соответствовало имя произвольной длины и обязательное трёхсимвольное расширение, указывающее его тип. Регистр в именах не учитывался: они всегда выводились и сохранялись в верхнем регистре. Системные утилиты по-разному обрабатывали файлы с разными расширениями; например, исполняемые файлы имели расширение COM. Каталоги были доступны как файлы с расширением DIR; например, каталог с файлом, приведённым выше, имеет имя
- Код: Выделить всё
SYS$SYSDEVICE:[VMS$COMMON.DTR]DTR$LIB.DIR;1
Здесь не столь важны детали, сколько общая схема пути: диск:[путь]имя.расш
* В ОС Unix, ставшей в последнее время невероятно раскрученной сторонниками OSS, пути были организованы совершенно иначе. Дисков как элементов иерархии не было вовсе: файловая система имела единый корень, и диски "монтировались" в её каталоги. Единственный разделитель элементов пути -- косая черта; файлу соответствует только имя; слова в имени разделяются точкой или подчёркиванием, в зависимости от вкуса автора. Например, путь /usr/home/username/www_logs/www.990618 соответствует файлу www.990618 в каталоге /usr/home/username/www_logs
Регистр в именах учитывался, причём обычно использовался только нижний регистр.
В каждом каталоге было как минимум два подкаталога: .. (ссылка на родительский каталог) и . (ссылка на сам этот каталог). В файловую систему, наряду с обычными файлами, монтировались "специальные файлы": устройства, именованные трубы и сокеты и т.д. Самый знаменитый из всех специальных файлов -- это /dev/null, устройство-пустышка.
Тип файла нигде не сохраняется. Для некоторых важных типов файлов (каталог, исполнимый файл, устройство и т.д.) предусмотрены биты в 12-битном поле разрешений файла.
* ОС CP/M от Digital Research, написанная по образу и подобию ОС PDP-11, поддерживала только флопики в качестве дисков. Каталогов не было вовсе, поэтому пути имели вид A:CPNOTES.TXT -- со знаменитым ограничением 8.3. Никакой дополнительной информации расширения здесь не предоставляли: это было просто продолжение имени, отделённое от него точкой. Регистр в именах по-прежнему не учитывался.
Команда копирования файлов в CP/M, как и в PDP, называлась PIP; кроме дисков, она понимала "псевдоустройства" типа CON:, AUX:, NUL: и EOF:. Поддержка этих псевдоустройств ограничивалась командой PIP.
Каждому файлу соответствовало 3 бита атрибутов: только для чтения, системный, архивный. Длина файла сохранялась в блоках, поэтому в текстовых файлах, чтобы при выводе не печатать мусор из неиспользуемой части последнего блока, в конце ставился символ \032.
* ОС MS-DOS ставила своей целью полную совместимость с CP/M, поэтому в ней также были диски и имена файлов в формате 8.3, без различения регистров. Однако, псевдоустройства (чуть в другом количестве, чем в CP/M) поддерживались на уровне ОС как обычные файлы, и их можно было использовать в любой программе. Дополнительной фичей было то, что если прибавить к имени псевдоустройства расширение, оно продолжало работать: NUL.COM -- это то же самое, что NUL: или даже просто NUL.
Когда в MS-DOS 2.0 появились каталоги, программисты MS, писавшие до этого Unix-совместимую ОС XENIX и не обременённые опытом работы с PDP, построили гибрид из двух синтаксисов. Косая черта к этому времени уже использовалась как разделитель параметров в некоторых программах, поэтому каталоги решили разделять бэкслешами. Но единого корня ФС, как в Unix, всё-таки не сделали; поэтому появились такие интересные вещи, как "текущий каталог на каждом диске" (при том, что в Unix был только текущий каталог, а в CP/M -- только текущий диск), и псевдоподкаталоги .. и . в стиле Unix -- всюду, кроме корневого каталога, чтобы не нарушать совместимость с CP/M. Псевдоустройства тоже незримо присутствовали в каждом каталоге.
Малокументированной фичей MS-DOS была поддержка прямых слешей для разделения пути, наряду с обратными. Программисты, писавшие MS-DOS, сделали это для своего удобства -- чтобы пользоваться привычными по Xenix путями вида A:/SOMEDIR/SOMEFILE; или, обращаясь к текущему диску, просто /somedir/somefile
В DOS традиционно используется 6-битное поле атрибутов; к заимствованным из CP/M добавились новые атрибуты: скрытый, каталог, метка диска.
В следующий раз, если хватит сил, приплету сюда Windows и MacOS