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