Какие-нибудь функции POSIX или расширения glibc реализуют обход дерева файлов в ширину?
Я пишу демон, который использует inotify для мониторинга доступа к файлам, и очень важно, чтобы я ничего не пропустил при рекурсивном поиске. Я нашел эту интересную идею и начал ее реализовывать.
ftw () и ftw64() не используют алгоритм в ширину, это более "предварительный порядок". nftw() дает мне возможность сначала выбрать глубину, но я беспокоюсь о гонках на верхних листьях.
Я надеюсь, что что-то упустил, возможно расширение GNU? Или я просто смотрю на реализацию своей собственной с безопасными обратными вызовами типа (что я действительно предпочел бы не делать)?
Или, мое понимание преимуществ широты в первую очередь по глубине ошибочно для этого типа приложений?
1 ответ
Глядя на спецификацию для ' nftw ()', флаг FTW_DEPTH выполняет пост-порядок (сначала глубину) обхода, посещая подкаталоги перед посещением узла каталога.
Я не думаю, что какой-либо из стандартных алгоритмов выполняет поиск в ширину.
Предположительно, вы должны написать bfftw () на основе интерфейса nftw (). Обратите внимание, что вы должны ставить в очередь элементы, которые необходимо посетить рекурсивно (каталоги) во время сканирования.