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

Было бы лучше сделать сценарий, который инициирован любое время изменения конфигурации сети, и имейте тот сценарий, безусловно обновляют DNS. При использовании Администратора сети такой сценарий может войти /etc/NetworkManager/dispatcher.d - см. networkmanager (8) для деталей.

Если Вы не используете администратора сети, /etc/dhcp/dhclient-enter-hooks.d могло бы быть более соответствующим.

Затем Вы ничего не должны будете опрашивать.

29
06.09.2014, 21:59
1 ответ

Ссылка на номер ошибки из последней спецификации 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 всякий раз, когда кто-то пытается to read () каталог, даже если он открыт только для чтения.

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

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

13
27.01.2020, 19:38

Теги

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