Ответ 1
- Документация (из Мониторинг активности файловой системы с помощью inotify)
API-интерфейс inotify C
Inotify предоставляет три системных вызова для создания мониторов файловой системы всех типов:
- inotify_init() создает экземпляр подсистемы inotify в ядре и возвращает дескриптор файла при успехе и -1 при ошибке. Как и другие системные вызовы, если inotify_init() не работает, проверьте errno для диагностики.
- inotify_add_watch(), как следует из названия, добавляет часы. На каждом часе должен быть указан путь и список соответствующих событий, где каждое событие задается константой, например IN_MODIFY. Чтобы отслеживать несколько событий, просто используйте логический или -трубный (|) оператор в С-между каждым событием. Если inotify_add_watch() завершается успешно, вызов возвращает уникальный идентификатор зарегистрированных часов; в противном случае он возвращает -1. Используйте идентификатор для изменения или удаления связанных часов.
- inotify_rm_watch() удаляет часы.
Также необходимы системные вызовы read() и close(). Учитывая дескриптор, полученный inotify_init(), вызовите функцию read() для ожидания предупреждений. Предполагая типичный файловый дескриптор, приложение блокирует до получения событий, которые выражаются как данные в потоке. Общий метод close() в дескрипторе файла, полученный inotify_init(), удаляет и освобождает все активные часы, а также всю память, связанную с экземпляром inotify. (Здесь также применяется стандартное оговорка о ссылках на ссылки. Все дескрипторы файлов, связанные с экземпляром, должны быть закрыты до того, как память, потребляемая часами, и inotify будет освобождена.)
- Пример (из Kernel Korner - введение в inotify)
#include "inotify.h" #include "inotify-syscalls.h" int wd; wd = inotify_add_watch (fd, "/home/rlove/Desktop", IN_MODIFY | IN_CREATE | IN_DELETE); if (wd < 0) perror ("inotify_add_watch");
В этом примере добавляются часы в каталоге /home/rlove/Desktop для любых изменений, создания файлов или удаления файлов.