Вы не можете заставить ядро только сообщать вам об изменении определенного пути. Причины немного тонкие:
В Linux файловый объект существует независимо от любых имен, которые он может иметь. Имена файлов на самом деле являются атрибутами их содержащей директории, и один файл может вызываться несколькими именами (см., Жесткая ссылка).
Ядро должно иметь что-то для прикрепления объектов inotify; он не может прикрепить объект к путевому файлу, поскольку он не является реальным объектом файловой системы; Вы должны прикрепить к родительскому каталогу или файлу, который описывает путь. Но вы не можете присоединиться к файлу, потому что вы смотрите, чтобы создать файл с заданным именем, а не изменить его.
Теоретически, ядро может реализовать API, который позволяет выбирать события для заданного пути при добавлении часов в каталог, почти так же, как он позволяет выбирать типы событий. Это раздуло бы API, и ядро в конце концов обработало бы те же данные и выполнило бы то же сравнение строк, что и в пользовательском пространстве.
Заметно ли снижение производительности при размещении часов в очень активном каталоге? Я не уверен, насколько вы активны; десятки файлов в секунду, сотни, миллионы?
В любом случае, я бы избегал access
: это всегда будет гонкой. Файл может быть создан и удален между вызовами access
, и вызов access
в очень узком цикле будет медленным, и это та проблема, которую inotify
нужно решить.
access
с,F_OK
чтобы узнать, существует ли оно еще.