Файлы:
Разделяемая память
В ОС Windows Win32
API разделяемая память реализуется через проекцию
файла на адресное пространство процесса. Файл может быть: либо настоящий файл
на диске, либо безымянный файл, который создаётся внутри файла свопинга.
Для получения
разделяемой памяти необходимо создать файл, проецируемый в память не на диске,
а в свопинге системы, с помощью функции:
HANDLE CreateFileMapping(
HANDLE hFile,
//описание на настоящий файл или
// INVALID_HANDLE _VALUE
PSECURITY_ATTRIBUTES psa, //атрибуты безопасности
DWORD fdwProtect, //флаги проецирования
DWORD dwMaximumSizeHigh, //размер файла
DWORD dwMaximumSizeLow, //размер файла
PCTSTR pseName);
Флаги
проецирования:
PAGE_READONLY -
память только на чтение
PAGE_READWRITE
PAGE_WRITECOPY -
когда будем писать в память, то в памяти данные изменяются, а в файле нет
SEC_NOCACHE -
сразу запись на диск, если нет то буферизация
Проекция файла
на адресное пространство процесса задается с помощью функции:
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, //1
DWORD dwDesiredAcces, //2
DWORD dwFileOffsetHigh, //3
DWORD dwFileOffsetLow, //4
SIZE_T dwNumberOfBytesToMap); //5
1 – описатель
на объект
2 – желаемый
доступ, может быть вида:
FILE_MAP_READ
FILE_MAP_WRITE
FILE_MAP_COPY
FILE_MAP_ALL_ACCESS
3 – смещение
от начала файла
5 – количество
байт для окна разделяемой памяти (8 байт)
Функция
возвращает адрес этого окна.
Обратная
функция:
BOOL UnmapViewOfFile(
LPVOID lpBaseAddress);
По окончании
работы следует вызвать функции UnmapViewOfFile и CloseHandle для дескриптора спроецированного в память
файла.
Комментариев нет:
Отправить комментарий