我正在使用 Qt 将文件映射到一块内存页面
QFile::map (qint64 offset, qint64 size, MemoryMapFlags flags = NoOptions)
本质上,这应该是一个mmap
系统函数调用。我想知道如何保证我可以访问返回的内存,即使磁盘上的文件被截断。我似乎需要这个,因为我从磁盘文件中读取并希望优雅地处理错误
if (offset > m_file.size())
// throw an error...
if (m_mappedFile != NULL) return m_mappedFile + offset;
显然,这包含一个竞争条件,因为文件大小可能会在检查和访问映射之间发生变化。如何避免这种情况?