Хотя есть похожие вопросы, как здесь или здесь, у меня есть вопрос о другом случае.
Используя C/C++, я хочу записать несколько байтов в файл. Первоначально файл имеет данные. Просто обновляю содержимое файла: открываю, пишу и закрываю. Однако, если он не работает во время записи, и если мы не сможем справиться с отказом (например, сбой приложения, прерывание, выключение электричества и т.д.), Что гарантируется в выходном файле между приведенным ниже списком? Какая ситуация может произойти, чего не может?
Если вы можете дать мне независимые от ОС подходы, я был бы рад
благодаря
Напишите новые данные в файл с тем же именем, но с расширением 'tmp'. Сбросьте и закройте файл tmp. Удалите исходный файл. Переименуйте файл tmp в исходное имя файла.
При запуске сканируйте папку для всех файлов. Удалите все файлы tmp, чья часть имени соответствует существующему файлу 'source' (т.е. система была прервана во время записи файла tmp). Переименуйте любой файл tmp, чья часть имени не соответствует существующему исходному файлу (был записан файл tmp, исходный файл был удален, но система была прервана до переименования).
Эта система зависит от атомарности удаления исходного файла. Если это удастся, вы получите новые данные, если они не пройдут, вы получите старые данные. Вы не должны получать бит каждого.