Я ищу mmap
область файла, внесите изменения, а затем либо msync(MS_INVALIDATE)
их, чтобы изменения в памяти были потеряны, либо, если мне нравятся изменения, msync(MS_SYNC)
, чтобы записать ихобратно к базовому хранилищу.
msync
manpage говорит следующее о MS_INVALIDATE
:
Когда указано MS_INVALIDATE, msync () должен сделать недействительнымвсе кэшированные копии сопоставленных данных, которые несовместимы с постоянными местами хранения, так что последующие ссылки должны получать данные, которые когда-либо соответствовали постоянным местам хранения между вызовом msync () и первой последующей ссылкой на данные в памяти.
Создается впечатление, что MS_INVALIDATE
следует сбросить, чтобы вернуть память обратно в состояние в хранилище.Однако изменения, похоже, уже достигли устройства к тому времени, когда я звоню msync
.
- Могу ли я задержать или предотвратить автоматическую запись данных обратно на устройство?
- Можно ли работать только с обратной записью вручную?
Примечания
- Размер основного хранилища может составлять несколько ТБ.