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