Я пытаюсь посмотреть, смогу ли я добавить новую функцию в inotifywait, которая во время фаза наблюдения отслеживает список каталогов, в которых не было никаких событий, и перед завершением распечатывает этот список. На данный момент inotifywait может отображать каталоги, получившие событие. Я ищу список каталогов, которые не получили никаких событий.
Чтобы добиться этого, я использую следующий подход.
- Пока inotifywait размещает часы, создайте массив всех каталогов и хеш-таблицу, используя hsearch_r с ключом в качестве имени каталога, используя функцию
haddи значение в качестве индекса элемента массива, только что созданного для этого каталога.см. код здесь - Когда даже происходит в данном каталоге, я перехожу к хэш-таблице, созданной на шаге 1,
hfindиз значения, соответствующего этому имени каталога (которое является индексом элемента массива), и устанавливаю элемент по этому индексу в массив в NULL. См. поиск хеш-ключа - Прежде чем выйти из inotifywait, я распечатаю все элементы массива, которые не равны NULL. По сути, это список каталогов, которые не получили никакого СОБЫТИЯ от inotifywait.
Проблема, которую я вижу, заключается в том, что hadd выполняется успешно, и следующий оператор hfind для только что вставленного элемента работает. Когда hsearch_r НАЙТИ, когда происходит даже, шаг 2 выше не выполняется. Чтобы увидеть, сколько элементов содержится в хеш-таблице, я жестко закодировал имя каталога в hfind после того, как сделал hadd. Это проходит только тогда, когда жестко закодированный каталог только что вставлен. Впоследствии следующий поиск завершается ошибкой, потому что хэш-таблица, похоже, была перезаписана следующим элементом.
Я надеюсь, что кто-нибудь увидит, где я ошибся. Я прочитал вопрос hsearch_r и опубликовал новый после краткого обсуждения.