mmap
создает связь между областью памяти и текущим экстентом файла (называемого "файлом резервной копии").Он не меняет размер файла и не обязательно учитывает какие-либо изменения в размере файла.
Возможно, ваш учитель пытается показать вам этот факт в этом примере.
В случае, если файл короче, чем отображенный объем памяти, остальная часть экстента заполняется нулями при выполнении mmap
.Однако изменения в этом регионе не будут записаны в файл резервной копии и могут или не могут быть видны другим процессам, использующим сопоставление, даже если было установлено MAP_SHARED
.
Если вы создалисопоставленный регион с включенной записью, следует избегать ссылки на часть региона, отсутствующую в файле.(Если вы просто хотите, чтобы файл был постоянной резервной копией совместно используемой памяти, вам, вероятно, следует использовать ftruncate
, чтобы установить размер файла в соответствии с желаемым размером отображения.) Это необходимо сделать перед вызовом mmap
, потому что если размерфайл изменяется во время действия сопоставления, результатом является неопределенное поведение.