Открывайте каждый файл, но не ссылки на другие каталоги при использовании scandir()
Я хочу рекурсивно копировать один каталог в другой (например, cp -R
) используя POSIX scandir()
,
Проблема в том, что когда я копирую каталог, такой как /sys/bus/, который содержит ссылки на более высокие уровни (например: foo/foo1/foo2/foo/foo1/foo2/foo/...), система переходит в состояние цикла и копирует каталоги "посередине" навсегда...
Как я могу проверить, является ли файл, который я открываю с dirent, ссылкой или нет?
1 ответ
Посмотрите на это: Как проверить, указывают ли два имени файла на один и тот же физический файл
Вам нужно сохранить список инодов, которые вы посетили, чтобы убедиться, что вы не получите дубликатов. Если у вас есть две жесткие ссылки на один и тот же файл, канонического имени "один" не существует. Одна возможность состоит в том, чтобы сначала сохранить все файлы, а затем повторить все имена файлов. Вы можете хранить структуру пути отдельно от inode и содержимого файла.