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 автоматически освобождает отображаемые области при завершении процесса.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Установка размера файла, инициализация файла и разреженные файлы
Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла
Отображение файлов
Отображение файлов Динамическая память, распределенная в кучах, должна физически размещаться в файле подкачки. Управление перемещением страниц между физической памятью и файлом подкачки, а также отображением файла подкачки на виртуальное адресное пространство
Отображение файла на адресное пространство процесса
Отображение файла на адресное пространство процесса Следующим шагом является распределение виртуального адресного пространства и отображение на него файла с использованием объекта отображения. С точки зрения программиста этот процесс распределения памяти
Отображение верхней памяти
Отображение верхней памяти По определению, страницы верхней памяти не могут постоянно отображаться в адресное пространство ядра. Поэтому страницы памяти, которые были выделены с помощью функции alloc_pages(), при использовании флага __GFP__HIGHMEM могут не иметь логического
Постоянное отображение
Постоянное отображение Для того чтобы отобразить заданную структуру page в адресное пространство ядра, необходимо использовать следующую функцию.void *kmap(struct page *page);Эта функция работает как со страницами нижней, так и верхней памяти. Если структура page соответствует
13.2. Отображение в памяти
13.2. Отображение в памяти Операционная система Linux позволяет процессу отображать файлы в их адресное пространство. Такое отображение создает взаимно однозначное соответствие между данными в файле и в отображаемой области памяти. Отображение в памяти обладает рядом
(8.10) Моя любимая программа работает только под аккаунтом администратора :( Как сделать, чтобы она работала и под аккаунтом обычного пользователя?
(8.10) Моя любимая программа работает только под аккаунтом администратора :( Как сделать, чтобы она работала и под аккаунтом обычного пользователя? 1. Входим в систему под аккаунтом администратора, запускаем regedt32.exe, в разделе HKLM/SOFTWARE находим подраздел нужной программы. Затем
4.2 СТРУКТУРА ФАЙЛА ОБЫЧНОГО ТИПА
4.2 СТРУКТУРА ФАЙЛА ОБЫЧНОГО ТИПА Как уже говорилось, индекс включает в себя таблицу адресов расположения информации файла на диске. Так как каждый блок на диске адресуется по своему номеру, в этой таблице хранится совокупность номеров дисковых блоков. Если бы данные
7.5. Моя любимая программа работает только под аккаунтом администратора :( Как сделать, чтобы она работала и под аккаунтом обычного пользователя?
7.5. Моя любимая программа работает только под аккаунтом администратора :( Как сделать, чтобы она работала и под аккаунтом обычного пользователя? Наиболее простой способ, это запустить программу через пункт Run As... в меню вызываемым правой кнопкой мыши. Выбираем нужного
Отображение
Отображение Еще одной возможностью, которую предоставляет пользователям Windows, является определение тех значков ActiveX-объектов, которые будут отображаться на Рабочем столе, в папках Панель управления и Мой
Режим обычного захвата
Режим обычного захвата Режим обычного захвата удобен, если требуется перенести на жесткий диск компьютера все содержимое видеокассеты или несколько длительных фрагментов. В первом случае можно включить режим захвата всей кассеты и не находиться все это время за
5.3. Отображение файлов в памяти
5.3. Отображение файлов в памяти Благодаря механизму отображаемой памяти процессы получают возможность общаться друг с другом посредством совместно используемого файла. Схематически это можно представить как совместный доступ к именованному сегменту памяти, хотя
Зеркальное отображение
Зеркальное отображение Если вы собираетесь создать зеркальное отображение трехмерного объекта относительно прямой, лежащей в плоскости XY, то по-прежнему можно воспользоваться командой MIRROR. В противном случае необходимо применить команду 3DMIRROR, создающую отражение