Как прочно переименовать файл в POSIX?
Как правильно переименовать файл в файловой системе POSIX? Особенно интересно о fsyncs накаталоги, (Если это зависит от OS / FS, я спрашиваю о Linux и ext3 / ext4).
ЗаметкаУ StackOverflow есть и другие вопросы о долговременных переименованиях, но, к слову, они не решают проблему синхронизации каталогов (что для меня важно - я даже не изменяю данные файлов).
В настоящее время у меня есть (в Python):
dstdirfd = open(dstdirpath, O_DIRECTORY|O_RDONLY)
rename(srcdirpath + '/' + filename, dstdirpath + '/' + filename)
fsync(dstdirfd)
Конкретные вопросы:
Это также неявно fsync исходный каталог? Или я мог бы в конечном итоге получить файл, отображаемый в обоих каталогах после выключения питания (то есть мне пришлось бы проверить количество жестких ссылок и вручную выполнить восстановление), т. Е. Невозможно гарантировать длительную атомарную операцию перемещения?Если я fsync исходный каталогвместо каталог назначения, это также неявно fsync каталог назначения?Существуют ли какие-либо полезные инструменты для тестирования / отладки / обучения (инжекторы ошибок, инструменты самоанализа, фиктивные файловые системы и т. Д.)?Заранее спасибо.