Пишу программу, что-то вида базы данных. Если по простому, то она должна читать/писать по определенному смещению (допустим, первая запись, десятая), и — в хидер. Проблема в том, что это не атомарная операция, т.е. может быть так, что я пишу по смещению 0x200 (запись), а потом перехожу к хидеру (скажем, 0x800000 ), и в это время случается сбой. Первый WriteFile успешно завершится, а второй — нет. Как быть?
1. Пробовал маппинг, не вышло, там проблемы с секциями, выравниванием, в общем проще забить.
2. Транзакции — мс не рекомендует их в ОС выше восьмерки, как понимаю уберут в ядро или вообще.
3. Писать во временный файл и потом replacefile — база огромная, да и накладно ради 1 операции копировать туда сюда много данных.
Посоветуйте что-нибудь.
M>2. Транзакции — мс не рекомендует их в ОС выше восьмерки, как понимаю уберут в ядро или вообще.
Реализуй свои транзакции: rollback журнал как в sqlite.
https://blog.sqlitecloud.io/journal-modes-in-sqlite
The default journal mode in SQLite is the Rollback Journal. In this mode, before any changes are written to the database, a copy of the original unchanged data is stored in a separate rollback journal file. This copy includes all the data pages that the transaction modifies. If the system crashes mid-transaction, SQLite can use this rollback journal to restore the database to its previous state, ensuring that no partial updates are applied.
Кстати, почему бы не взять sqlite (или другую встраиваемую БД), вместо написания своей?