Как каталог является «особым типом файла»?

Я читаю этот учебник Unix и наткнулся на эту цитату …

Здесь следует отметить, что каталог представляет собой только особый тип файла.

… но никаких пояснений или деталей не предусмотрено. Как каталог действительно просто файл?

5 Solutions collect form web for “Как каталог является «особым типом файла»?”

Многие объекты в операционных системах типа * nix (и другие) считаются файлами или имеют определяющий файловый аспект, даже если они не обязательно представляют собой последовательность байтов, хранящихся в файловой системе. То, как реализуются каталоги, зависит от типа файловой системы, но в целом то, что они содержат, рассматриваемый как список, представляет собой последовательность сохраненных байтов, поэтому в этом смысле они не являются такими особыми.

Один из способов определить, что такое «файл» в контексте * nix, – это то, что связано с файловым дескриптором . Согласно статье wikipedia, дескриптор файла

является абстрактным индикатором, используемым для доступа к файлу или другому ресурсу ввода / вывода , например, к каналу или сетевому соединению …

Другими словами, они относятся к различным видам ресурсов, из которых / может быть прочитана или записана последовательность байтов, хотя источник / назначение этой последовательности не заданы. Иными словами, «где» ресурса может быть что угодно. Это определяет, что это канал информации. Это часть того, почему иногда говорят, что в unix «все есть файл». Вы не должны воспринимать это буквально, но это заслуживает серьезного рассмотрения. В случае каталога эта информация относится к тому, что находится в каталоге, а на более низком уровне реализации – как найти его в файловой системе.

Каталоги являются особыми в этом смысле, потому что в собственном C-коде они не связаны якобы с файловым дескриптором; API POSIX использует специальный тип дескриптора потока DIR* . Однако этот тип действительно имеет базовый дескриптор, который можно получить . Дескрипторы управляются ядром, и доступ к ним всегда включает системные вызовы, следовательно, еще один аспект того, что дескриптор заключается в том, что он является каналом, управляемым ядром ОС. У них есть уникальные (для каждого процесса) числа, начинающиеся с 0, что обычно является дескриптором для стандартного входного потока.

В Unix Way of Doing Things: все это файл.

Каталог – это один (много) тип специального файла. Он не содержит данных. Вместо этого он содержит указатели на все файлы, которые содержатся в каталоге.

Другие типы специальных файлов:

  • связи
  • Розетки
  • приборы

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

Мой ответ – просто воспоминание, но в 199x vintage Unixes, которого было много, каталоги были файлами, только что помеченные как «каталог» где-то в inode на диске.

Вы можете открыть каталог с чем-то вроде open(".", O_RDONLY) и получить полезный дескриптор файла. Вы можете разобрать содержимое, если вы прокрутили через /usr/include и нашли правильное определение структуры C. Я знаю, что я сделал это для систем SunOS 4.1.x, файловой системы EFS SGI и любых рабочих станций DIP для Mips-CPU для файловой системы, возможно, BSD4.2 FFS.

Это был плохой опыт. Стандартизация на уровне виртуальной файловой системы – хорошая вещь для переносимости, даже если каталоги больше не являются строгими. Слои VFS позволяют экспериментировать с файловыми системами, где каталоги не являются файлами, такими как ReiserFS или NFS.

Каталог отличается тем, что он имеет «d» в своем режиме, сообщая файловой системе, что он должен интерпретировать его содержимое как список других файлов, содержащихся в каталоге, а не обычный файл, который представляет собой всего лишь последовательность байтов прочитанный приложением. Вот и все.

Каталоги – это файлы, потому что в Linux-системах используется универсальная модель ввода-вывода . В модели все в системе является файлом, и к нему можно обращаться с одинаковыми системными вызовами и различными командами.

Они имеют особый тип, потому что их i-узлы имеют знак для типа файла, и у них есть специальная структура, являющаяся таблицей имен файлов и ссылками на другие i-узлы. Эти пары имен файлов, также известные как «жесткие ссылки», в i-узле каталога перечисляют файлы «внутри» каталога.

Каталоги предназначены только для организации файлов. Когда файл «перемещается» из каталога в другой, сам файл не перемещается на диск. Просто запись в одном каталоге i-узлов удаляется и записывается в другой i-узел каталога.

  • Что мне делать с профилями btrfs?
  • Предоставлять доступ только для чтения к определенным папкам?
  • Ускорить копирование 1000000 небольших файлов
  • Как выполнить сжатие слоя поверх шифрования поверх BtrFS, для каждого файла?
  • Переделка жесткого диска
  • WORM или файловая система архива?
  • Установка нового ядра OpenBSD «безопасно»: почему «make install» проходит через эти дополнительные обручи?
  • пользователь root отказал в доступе к .gvfs в rsnapshot?
  • Как объединить один каталог в другой?
  • Создайте файл, который действительно является сетевым портом
  • Можно ли резервное копирование файловой системы linux путем копирования дерева структуры файлов?
  • Linux и Unix - лучшая ОС в мире.