Как я могу гарантировать, что отображенный в памяти файл сохраняет страницы памяти доступными?

Я использую 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;

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

6

Решение

От man mmap:

SIGBUS Attempted  access to a portion of the buffer that does not correspond to the file
(for example, beyond the end of  the  file,  including  the  case  where  another
process has truncated the file).

Таким образом, вы должны установить обработчик сигнала для SIGBUS (по умолчанию происходит сбой программы)

3

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

Других решений пока нет …

По вопросам рекламы [email protected]