Рассмотрим файловую систему, нацеленную на некоторые встроенные устройства, которая делает чуть больше, чем хранит файлы в иерархической структуре каталогов. В этой файловой системе отсутствуют многие операции, которые вы можете использовать в таких системах, как Unix и Windows (например, ее права доступа совершенно разные и не привязаны к метаданным, хранящимся в каталогах). Эта файловая система не допускает никаких жестких или мягких ссылок, поэтому каждый файл имеет уникальное имя в строгой древовидной структуре.
Есть ли польза для хранения ссылки на себя и его родительский каталог в структуре данных на диске, который представляет каталог?
Большинство UNIX файловые системы имеют .
и ..
запись на диске. Интересно, почему они не обрабатывают их на уровне VFS (универсальный драйвер файловой системы). Это исторический артефакт? Есть ли веская причина, и если да, то какая именно, чтобы я мог определить, имеет ли это отношение к моей встроенной системе?
источник
Ответы:
Наличие ссылок на родительский каталог имеет смысл для меня. Если у вас их нет, вам всегда нужно работать с целым списком каталогов. Так, например,
/home/svick/Documents/
должно быть представлено как{ /, /home/, /home/svick/, /home/svick/Documents }
. Если вы этого не сделаете, вы не сможете найти родительский каталог вообще (или это будет очень дорого). Это не только неэффективно, но и опасно. Если у вас есть два таких списка, которые перекрываются, они могут легко десинхронизироваться, если вы переместили какой-либо каталог.С другой стороны, если у вас есть ссылка на родительский каталог, это более эффективно и безопасно.
Я не вижу причин, чтобы на самом деле иметь ссылку на текущий каталог. Если у вас есть структура, представляющая некоторый каталог, и вы хотите получить доступ к этому каталогу, использование
.
всегда совершенно не нужно. Из-за этого я ожидаю, что.
ссылка на самом деле не существует в структуре файловой системы и является только виртуальной.источник
.
и..
записи.Вы получаете меньше особых случаев. Во многих ситуациях VFS может обрабатывать «..», как и любое другое имя каталога.
источник
Единственная причина, которую я могу себе представить, заключается в следующем сценарии:
Первоначальная реализация файловой системы существовала в том же формате каталогов, но понятия путей к файлам и подкаталогов в то время не рассматривались (см . Файловая система Unix PDP-7 ).
Тогда люди думали, что разрешение пути и подкаталоги будут полезны!
Чтобы сохранить некоторую обратную совместимость со старыми реализациями, было решено, что
.
и..
будет храниться на диске, как и любой другой каталог.Так что, может быть, у нас остались эти бесполезные артефакты, просто ради обратной совместимости с 40-летним программным обеспечением? Достоверный сценарий?
Примечание. Также было не совсем глупо добавлять эти записи в список каталогов, так как вам все равно нужно где-то хранить номер инода вашего истинного родительского каталога (помните, что жесткие ссылки на каталоги были разрешены в это время), и ссылку на ваш собственный номер инода может быть хорошей проверкой работоспособности.
источник
Я не вижу причин , чтобы реализовать
.
и..
на любом уровне , а не другой. Однако, если вы ориентируетесь на встраиваемые системы, любой слой, который вы можете сохранить, может заработать доллары, поэтому имеет смысл попытаться реализовать все как можно ниже.Что касается общей необходимости
.
и..
как бы вы выразили относительные пути без них? По крайней мере,..
это необходимо для путей, которые покидают текущее поддерево. Если вам не нужны такие пути (может быть, дерево является примитивным способом кодирования прав доступа?), Вам не нужно..
.источник