У меня есть 1-е издание книги «Среда программирования Unix». В главе 2 авторы утверждают, что каталоги доступны для чтения в виде файлов, и упоминают некоторые факты о формате этих файлов. Они дают некоторые примеры использования, такие как cat .
(в упражнении 2-2).
По крайней мере, в Дарвине каталоги больше не читаются как файлы. По крайней мере, они кажутся файлами нулевой длины при чтении.
Когда произошло это изменение, и есть ли официальные документы об этом?
files
filesystems
directory
Тайлер
источник
источник
cat .
а в Solaris 11 (как в Linux) - нет. Круто.Ответы:
Ссылка на номер ошибки из последней спецификации POSIX (POSIX.1-2008) гласит:
Это означает, что в POSIX-совместимой ОС вы должны иметь возможность читать () каталог, если вы открыли его только для чтения (O_RDONLY).
Я только что попробовал это на коробке NetBSD (которая действительно заботится о POSIX), и работает как ожидалось, в то время как это терпит неудачу на GNU / Linux с EISDIR (что не должно происходить).
Беглый взгляд на Linux показывает, что это предназначено ( http://lxr.free-electrons.com/source/fs/libfs.c#L189 ):
Хотя конкретная реализация файловой системы может переопределить ее (как это делает CEPH: http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142 ), поведение по умолчанию - возвращать EISDIR всякий раз, когда кто-то пытается read () каталог, даже если он открыт только для чтения.
Я проследил это изменение до версии 2.0.x, и, по крайней мере, для файловой системы ext2 это все еще имело место.
Итак, да, в POSIX-совместимой ОС вы должны иметь возможность читать каталог, но некоторые ядра (например, Linux и, очевидно, другие) просто игнорируют это условие и нарушают стандарт.
источник
readdir(2)
более портативный. Это наводит на мысль, что правильный ответ на вопрос OP: «Когда XSI стал популярным».