Какие-нибудь функции POSIX или расширения glibc реализуют обход дерева файлов в ширину?

StackOverflow https://stackoverflow.com/questions/1647572

Вопрос

Я пишу демон, который использует inotify для мониторинга доступа к файлам, и очень важно, чтобы я ничего не пропустил при рекурсивном поиске. Я нашел эту интересную идею и начал реализовывать он.

ftw () и ftw64 () не используют алгоритм в ширину, это более «предварительный порядок». nftw () дает мне возможность сначала выбрать глубину, но я беспокоюсь о гонках на верхних листьях.

Я надеюсь, что что-то упустил, возможно расширение GNU? Или я просто смотрю на реализацию своей собственной системы с безопасными обратными вызовами (что я действительно предпочел бы не делать)?

Или мое понимание преимуществ широты по сравнению с глубиной в первую очередь ошибочно для этого типа приложений?

Это было полезно?

Решение

Посмотрите на спецификацию для nftw () ', флаг FTW_DEPTH выполняет постпорядок (сначала в глубину), посещая подкаталоги перед посещением узла каталога.

Я не думаю, что какой-либо из стандартных алгоритмов выполняет поиск в ширину.

Предположительно, вы должны написать bfftw () на основе интерфейса nftw (). Обратите внимание, что вы должны ставить в очередь элементы, которые будут посещаться рекурсивно (каталоги) во время сканирования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top