Было бы лучше сделать сценарий, который инициирован любое время изменения конфигурации сети, и имейте тот сценарий, безусловно обновляют DNS. При использовании Администратора сети такой сценарий может войти /etc/NetworkManager/dispatcher.d
- см. networkmanager (8) для деталей.
Если Вы не используете администратора сети, /etc/dhcp/dhclient-enter-hooks.d
могло бы быть более соответствующим.
Затем Вы ничего не должны будете опрашивать.
Ссылка на номер ошибки из последней спецификации 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 и, по-видимому, другие) просто игнорируют это условие и нарушают стандарт.