Когда каталоги перестали быть читаемыми в качестве файлов?

У меня есть 1-е издание книги по программированию Unix. В главе 2 авторы заявляют, что каталоги читаются как файлы и упоминают некоторые факты о формате этих файлов. Они приводят примеры использования, такие как cat . (в упражнении 2-2).

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

Когда это изменение произошло, и есть ли там официальная документация?

28 голосов | спросил Tyler 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 06 Sep 2014 22:59:34 +0400 2014, 22:59:34

1 ответ


12

Ссылка на номер ошибки из последней спецификации POSIX (POSIX.1-2008) гласит:

  

[EISDIR]

     

Является ли каталог. Была предпринята попытка открыть каталог с указанным режимом записи.

Это означает, что на ОС, совместимой с POSIX, вы должны иметь возможность читать () каталог, если вы открыли его только для чтения (O_RDONLY).

Я только что попробовал это в блоке NetBSD (который действительно заботится о POSIX) и работает как ожидалось, пока он не работает на GNU /Linux с EISDIR (чего не должно быть).

Быстрый просмотр Linux показывает, что это предназначено ( http: //lxr.free-electrons.com/source/fs/libfs.c#L189 ):

ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
{
        return -EISDIR;
}

Хотя конкретная реализация файловой системы может ее переопределить (например, CEPH делает: http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142 ), поведение по умолчанию - вернуть EISDIR всякий раз, когда кто-то пытается прочитать () каталог, даже если он открыт только для чтения.

Я проследил это изменение обратно до 2.0.x и, по крайней мере, для файловой системы ext2, это все равно.

Итак, да, на ОС, совместимой с POSIX, вы должны иметь возможность читать каталог, но некоторые ядра (например, Linux и, по-видимому, другие) просто игнорируют это условие и нарушают стандарт.

ответил Sergio L. Pascual 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 17 Sep 2014 15:40:26 +0400 2014, 15:40:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132