Я работаю над приложением, которое должно обеспечить согласованность данных, сохраненных на диске. Мне нужно гарантировать, что данные никогда не будут повреждены при сбросе на диск. То есть при сохранении данных может произойти перезагрузка или завершение работы приложения.
Я знаю шаги, которые нужно сделать:
http://blogs.msdn.com/b/adioltean/archive/2005/12/28/507866.aspx
Но мне было интересно, есть ли уже реализация, позволяющая сделать это предпочтительно кросс-платформенным способом? Я предполагаю, что boost :: filesystem гарантирует атомарное переименование (в Windows и POSIX), так что мне интересно, пропустил ли я где-нибудь эту функцию в boost? Спасибо
UPD: у меня были надежды на boost :: interprocess :: message_queue, но он просто зависает при чтении очереди, если процесс прерывается в процессе добавления в очередь + отображенный в память файл занимает максимальный размер на диске, который, как ожидается, будет в любом случае худший случай.
Вы можете получить снижение производительности и / или потерять все данные приложения, если будете использовать переименование. Может быть, хранить некоторую ключевую информацию (например, идентификатор записи и отпечаток пальца) после каждой записи и искать последнюю правильную ключевую информацию при запуске приложения?