Поэтому я настраиваю код для просмотра файла конфигурации для редактирования, который работал до тех пор, пока я не использовал VIM для редактирования файла, тогда мне также нужно было посмотреть каталог для переименований и создания. Затем я обнаружил, что не поймал переименования выше в иерархии путей. Затем я заглянул в символические ссылки ... гааахххх!Используйте INotify для просмотра файла с несколькими символическими ссылками.
Сначала настроить составлен пример, показывающий один (из многих) сложных сценариев символических ссылок:
mkdir config1
touch config1/config
ln -s config1 machine1
mkdir config2
touch config2/config
ln -s config2 machine2
ln -s machine1 active
Теперь, учитывая имя файла, как активный/конфигурации, что я хочу смотреть, я могу видеть, как получить Inotify Диск-дескриптор для:
config1/ -> watch active/ follow symlinks (watches inode for config1)
active/ -> watch active/ dont follow symlinks (watches inode for active symlink
active/config -> watch active/config (watches inode for config1/config)
Как добавить часы на символическую ссылку machine1? Нужно ли мне найти способ вручную перемещать каждую символику, добавляя часы для каждого по пути? Как?
Цель состоит в том, чтобы:
mkdir config3
touch config3/config
ln -s -f -n config3 machine1
И есть Inotify предупреждают, что активный/конфиг был перенаправлен. На данный момент это выглядит, как я должен добавить часы для:
- target file inode
- every directory inode leading to the file (to detect moves/renames of directories)
- every symlink inode involved in reaching any of the above
Там должна быть более простой способ, чтобы просто посмотреть один файл? Я отклонился от пути или это действительно так?
Вы не просматриваете страницу "1 файл" - вы смотрите полный путь по файлу. Это, плюс 'inotify', не являющееся рекурсивным, охватывает первые 2 пункта. Существование символических ссылок требует вашей последней точки. – tucuxi
Да, я понимаю, что INotify должен быть настроен для просмотра всех inodes, участвующих в достижении интересующего файла, но я не понимаю, что такое прецедент, который * не требует выполнения того, что я описал? Это сложно (я даже не упомянул «..» и символические ссылки), легко закручивать (подсчет ссылок на многократно встречающиеся каталоги и символические ссылки), имеет множество условий гонки (просмотр символической ссылки, когда кто-то ее меняет?), И все похоже, нуждается в этом. Но нет библиотеки, которая это делает? Да. – Speed8ump
Со всеми его недостатками, inotify все еще намного лучше, чем dnotify он заменяет (см., Например, http://lwn.net/Articles/604686/). Что касается отсутствия библиотек, вы не упомянули, что искали их; libinotiftytools может немного упростить ваши задачи (для вас это syscalls), но я не могу найти ничего, что покрывало бы ваш прецедент. – tucuxi