Ну, mmap
ping файл выполняется так же, как это делается для IPC или сопоставления анонимной памяти.В случае сопоставления анонимной памяти части, которые не были записаны, будут заполнены нулями страниц по требованию.
В случае сопоставленного файла страницы, которые соответствуют содержимому файла, читаются при доступе (ипосле записи тоже) из файла / или буферного кеша.Чтение или запись вне размера файла приведет к SIGBUS .По существу, указатель, возвращаемый mmap
, может рассматриваться аналогично указателю, возвращаемому malloc
, за исключением того, что до размера отображения / до байтов конца файла в отображении автоматически считываются из /и, возможно, прозрачно записывается в файл поддержки.
Пример:
fd = open("input.txt", O_RDWR, 0666);
fstat(fd, &stat_result);
char* contents = mmap(0, stat_result->st_size,
PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
(проверка ошибок пропущена)
После выполнения этого вы можете считать contents
указанием напервый байт символьного массива stat_result->st_size
символов, и вы можете использовать его как обычный массив, и операционная система будет прозрачно записывать изменения в файл.
С mmap
операционная система будет лучше понимать, какие части файла должны храниться в кеше памяти / буфера, а какие нет.