Составители:
Для открепления файла от адресного пространства процесса используется функция
UnmapViewOfFile(), а для уничтожения объектов “файл” и “проецируемый файл” -
функция CloseHandle(). Последовательность кода работы с проецированными файлами
следующая:
HANDLE hFile, hFileMapping;
PVOID pMassive;
hFile = CreateFile( “File Name”, ... );
hFileMapping = CreateFileMapping( hFile, ... );
CloseHandle( hFile ) ;
pMassive = MapViewOfFile( hFileMapping, ... );
/* Работа с массивом pMassive */
UnmapViewOfFile( pMassive );
Взаимодействие процессов через общую область данных. Когерентность. Два
процесса могут совместно использовать объект “проецируемый файл”. При этом, при
помощи функции MapViewOfFile() каждый процесс проецирует этот объект на свое ад-
ресное пространство и используют эту часть адресного пространства как разделяемую
область данных. Схема, описывающая данный механизм представлена на рис. 4.9.
Общий механизм таков: один процесс создает объект “проецируемый файл” с по-
мощью функции CreateFileMapping() и порождает другой процесс, передавая ему в на-
следство описатель этого объекта. Дочерний процесс может пользоваться этим описате-
лем наравне с родительским. Проблема состоит только в том, как сообщить дочернему
процессу, какой из переданных ему в наследство описателей является описателем “про-
ецируемого файла”. Это можно сделать любым способом. Например передачей парамет-
ров при запуске процесса, через переменные среды, передачей сообщения в главное ок-
но процесса и так далее.
Рис.4.9. Схема механизма взаимодействия процессов через общую область данных.
Общая область данных может быть создана не только путем проецирования файла,
но и путем проецирования части файла подкачки. Для этого в функцию
118
Для открепления файла от адресного пространства процесса используется функция
UnmapViewOfFile(), а для уничтожения объектов “файл” и “проецируемый файл” -
функция CloseHandle(). Последовательность кода работы с проецированными файлами
следующая:
HANDLE hFile, hFileMapping;
PVOID pMassive;
hFile = CreateFile( “File Name”, ... );
hFileMapping = CreateFileMapping( hFile, ... );
CloseHandle( hFile ) ;
pMassive = MapViewOfFile( hFileMapping, ... );
/* Работа с массивом pMassive */
UnmapViewOfFile( pMassive );
Взаимодействие процессов через общую область данных. Когерентность. Два
процесса могут совместно использовать объект “проецируемый файл”. При этом, при
помощи функции MapViewOfFile() каждый процесс проецирует этот объект на свое ад-
ресное пространство и используют эту часть адресного пространства как разделяемую
область данных. Схема, описывающая данный механизм представлена на рис. 4.9.
Общий механизм таков: один процесс создает объект “проецируемый файл” с по-
мощью функции CreateFileMapping() и порождает другой процесс, передавая ему в на-
следство описатель этого объекта. Дочерний процесс может пользоваться этим описате-
лем наравне с родительским. Проблема состоит только в том, как сообщить дочернему
процессу, какой из переданных ему в наследство описателей является описателем “про-
ецируемого файла”. Это можно сделать любым способом. Например передачей парамет-
ров при запуске процесса, через переменные среды, передачей сообщения в главное ок-
но процесса и так далее.
Рис.4.9. Схема механизма взаимодействия процессов через общую область данных.
Общая область данных может быть создана не только путем проецирования файла,
но и путем проецирования части файла подкачки. Для этого в функцию
118
Страницы
- « первая
- ‹ предыдущая
- …
- 114
- 115
- 116
- 117
- 118
- …
- следующая ›
- последняя »
