Книга: Программирование для Linux. Профессиональный подход
5.3.1. Отображение в памяти обычного файла
5.3.1. Отображение в памяти обычного файла
Для отображения обычного файла в памяти процесса предназначена функция mmap()
. Ее первым аргументом является адрес, который будет соответствовать началу отображаемого файла в адресном пространстве процесса. Если задать значение NULL
, ОС Linux выберет первый доступный адрес. Второй аргумент — это длина отображаемой области в байтах. Третий аргумент задает степень защиты диапазона отображаемых адресов. Он может содержать объединение битовых констант PROT_READ
, PROT_WRITE
и PROT_EXEC
, соответствующих разрешению на чтение, запись и выполнение соответственно. Четвертый аргумент содержит дополнительные флаги. Пятый аргумент — это дескриптор открытого файла. В последнем аргументе задается смещение от начала файла, с которого начинается отображаемая область. Можно перенести в память весь файл или только часть его, должным образом корректируя начальное смещение и длину отображаемой области.
Ниже перечислены дополнительные флаги, задаваемые в четвертом аргументе.
? MAP_FIXED
. При наличии этого флага ОС Linux использует значение первого аргумента как точный адрес размещения отображаемого файла. Этот адрес должен соответствовать началу страницы.
? MAP_PRIVATE
. Изменения, вносимые в отображаемую память, записываются не в присоединенный файл, а в частную копию файла, принадлежащую процессу. Другие процессы не узнают об этих изменениях. Данный режим не совместим с режимом MAP_SHARED
.
? MAP_SHARED
. Изменения, вносимые в отображаемую память, немедленно фиксируются в файле, минуя буфер. Этот режим используется при организации взаимодействия процессов и не совместим с режимом MAP_PRIVATE
.
При успешном завершении функция возвращает указатель на начало области памяти. В противном случае возвращается флаг MAP_FAILED
.
По окончании работы с отображаемым файлом его необходимо освободить с помощью функции munmap()
. Ей передается начальный адрес и длина отображаемой области. ОС Linux автоматически освобождает отображаемые области при завершении процесса.
- 5.3. Отображение файлов в памяти
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Эффективная работа с временными файлами сортировки
- Единое имя файла параметров InterBase
- Параметры конфигурационного файла InterBase
- 3.2.1.2. Начальное выделение памяти: malloc()
- 13. Зарабатываем на своих файлах: файлообменники, загружаеми получаем процент за скачивание
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Создание и открытие файла
- Управление файлами занятий
- Неисправности оперативной памяти
- Как работает модуль оперативной памяти