Я использую inotify для мониторинга различных каталогов на различных разделах (которые, возможно, расположены на разных жестких дисках). Чтобы быть уверенным, что собраны все события, которые произошли до определенного момента времени T, я прикасаюсь к специальному файлу в своем домашнем каталоге и жду, пока inotify сообщит эта модификация. Получив это уведомление, могу ли я быть уверен, что получил все события для всех изменений до T (для всех каталогов и всех разделов)?
inotify: сообщаются ли события строго в том же порядке, в котором они произошли в файловой системе?
Ответы (2)
В документации inotify в ядре указано " что каждый экземпляр [inotify] связан с уникальной упорядоченной очередью." Итак, я думаю, что события, связанные с часами, добавленными к данному экземпляру (созданному с помощью inotify_init()), принимаются в том же порядке, в котором они происходят .
Я не уверен, работает ли это для наблюдения за разными файловыми системами в одном и том же экземпляре inotify, но могу с уверенностью сказать, что в целом этот метод работает: мы используем его в Watchman (мы описываем его здесь: https://facebook.github.io/watchman/docs/cookies.html)
Мы предположили, что это не будет правильно упорядочено через границы файловой системы и создаст один экземпляр для каждого наблюдаемого корня; это упрощает нам правильное отслеживание и связывание событий. Нам также приходится иметь дело с fsevents, kqueue и другими реализациями наблюдения, поэтому мы стараемся избегать слишком тесной связи с базовой реализацией.
В зависимости от того, каков ваш конкретный вариант использования, вы можете обойтись одним экземпляром для каждой файловой системы и прикоснуться к специальному файлу в корне каждой в свое время T. При условии, что вы наблюдали оба изменения ваших специальных файлов, вы знайте, что вы видели все до времени Т и, возможно, даже немного больше. Если часть «возможно, немного больше» не является нарушителем условий сделки, тогда вы золотой.