Надежно записать значение на диск

У меня есть переменная (фиксированного размера). У меня есть двоичный файл на моем диске, на котором сохраняется эта переменная. Моя программа на C ++ должна:

  • Загрузить значение этой переменной с диска
  • Обновите значение этой переменной на диске

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

Поэтому мне нужно, чтобы операция обновления была завершена или вообще не происходила на диске. Я пытался понять, как это сделать, но никогда нельзя быть уверенным в том, что является наиболее правильным и стандартным способом сделать это. Мне нужно, чтобы решение было кроссплатформенным. Так, например, насколько я понял, хитрость, которая заключается в том, чтобы записать новое значение во временный файл, а затем переименовать его, будет работать только в POSIX-совместимых системах, в которых операция переименования является атомарной.

Есть ли глобально работающее решение? я не заинтересованы в производительности, так как эта переменная должна обновляться только время от времени.

2

Решение

  1. Откройте новый файл в том же каталоге.

  2. Запишите новое значение переменной в файл.

  3. Если у вас есть какая-то операция синхронизации (sync, fsync, syncfsчто угодно) используй.

  4. Закройте файл.

  5. Переименуйте файл, который вы только что написали поверх существующего файла.

Хотя только POSIX гарантирует, что это будет атомарно, каждая операционная система, которую вы, вероятно, будете использовать, будет точно понимать, чего вы хотите, и, если оборудование способно на это, даст вам это.

6

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector