Основы программирования в Win32API. Марапулец Ю.В. - 53 стр.

UptoLike

Составители: 

функция UnmapViewOfFile(), а для уничтожения объектов «файл» и «проеци-
руемый файл» – функция CloseHandle(). Последовательность кода работы
с проецированными файлами следующая:
HANDLE hFile, hFileMapping;
PVOID pMassive;
hFile = CreateFile(«File Name», ...);
hFileMapping = CreateFileMapping(hFile, ...);
CloseHandle(hFile) ;
pMassive = MapViewOfFile(hFileMapping, ...);
/* Работа с массивом pMassive */
UnmapViewOfFile(pMassive);…
Взаимодействие процессов через общую область данных. Когерентность.
Два процесса могут совместно использовать объект «проецируемый файл».
При этом при помощи функции MapViewOfFile() каждый процесс проецирует
этот объект на свое адресное пространство и использует эту часть адресного
пространства как разделяемую область данных. Общий механизм таков: один
процесс создает объект «проецируемый файл» с помощью функции
CreateFileMapping() и порождает другой процесс, передавая ему в наследство
описатель этого объекта. Дочерний процесс может пользоваться этим описате-
лем наравне с родительским. Проблема состоит только в том, как сообщить
дочернему процессу, какой из переданных ему в наследство описателей явля-
ется описателем «проецируемого файла». Это можно сделать любым способом
(например, передачей параметров при запуске процесса, через переменные
среды, передачей сообщения в главное окно процесса и т. д.).
Общая область данных может быть создана не только путем проецирова-
ния файла, но и путем проецирования части файла подкачки. Для этого
в функцию CreateFileMapping() необходимо передать в качестве параметра не
дескриптор ранее открытого файла, а – 1. В этом случае необходимо задать
размеры выделяемой области. Кроме того, в параметре lpName можно задать
имя объекта, которое является глобальным в системе. Если это имя задается
в системе впервые, то процессу выделяется новая область данных, а если имя
было уже задано, то именованная область данных предоставляется для совме-
стного использования.
Если один процесс меняет разделяемую область данных, то она меняется
и для другого процесса. Операционная система обеспечивает когерентность
разделяемой области данных для всех процессов. Но для обеспечения коге-
рентности процессы должны работать с одним объектом – «проецируемый
файл», а не с одним файлом.
3.3.3. Функции для работы с динамической областью памяти
Динамическая область памяти, или куча (heap), представляет собой блок
памяти, из которого программа при необходимости выделяет себе более мел-
53
функция UnmapViewOfFile(), а для уничтожения объектов «файл» и «проеци-
руемый файл» – функция CloseHandle(). Последовательность кода работы
с проецированными файлами следующая:
HANDLE hFile, hFileMapping;
PVOID pMassive;
hFile = CreateFile(«File Name», ...);
hFileMapping = CreateFileMapping(hFile, ...);
CloseHandle(hFile) ;
pMassive = MapViewOfFile(hFileMapping, ...);
/* Работа с массивом pMassive */
UnmapViewOfFile(pMassive);…
     Взаимодействие процессов через общую область данных. Когерентность.
Два процесса могут совместно использовать объект «проецируемый файл».
При этом при помощи функции MapViewOfFile() каждый процесс проецирует
этот объект на свое адресное пространство и использует эту часть адресного
пространства как разделяемую область данных. Общий механизм таков: один
процесс создает объект «проецируемый файл» с помощью функции
CreateFileMapping() и порождает другой процесс, передавая ему в наследство
описатель этого объекта. Дочерний процесс может пользоваться этим описате-
лем наравне с родительским. Проблема состоит только в том, как сообщить
дочернему процессу, какой из переданных ему в наследство описателей явля-
ется описателем «проецируемого файла». Это можно сделать любым способом
(например, передачей параметров при запуске процесса, через переменные
среды, передачей сообщения в главное окно процесса и т. д.).
     Общая область данных может быть создана не только путем проецирова-
ния файла, но и путем проецирования части файла подкачки. Для этого
в функцию CreateFileMapping() необходимо передать в качестве параметра не
дескриптор ранее открытого файла, а – 1. В этом случае необходимо задать
размеры выделяемой области. Кроме того, в параметре lpName можно задать
имя объекта, которое является глобальным в системе. Если это имя задается
в системе впервые, то процессу выделяется новая область данных, а если имя
было уже задано, то именованная область данных предоставляется для совме-
стного использования.
     Если один процесс меняет разделяемую область данных, то она меняется
и для другого процесса. Операционная система обеспечивает когерентность
разделяемой области данных для всех процессов. Но для обеспечения коге-
рентности процессы должны работать с одним объектом – «проецируемый
файл», а не с одним файлом.

       3.3.3. Функции для работы с динамической областью памяти

    Динамическая область памяти, или куча (heap), представляет собой блок
памяти, из которого программа при необходимости выделяет себе более мел-

                                      53