Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Учебный проект. Первый процесс создает объект "проекция файла" при помощи вызова функции CreateFileMapping с INVALID_HANDLE_VALUE и именем для объекта



Первый процесс

Первый процесс создает объект "проекция файла" при помощи вызова функции CreateFileMapping с INVALID_HANDLE_VALUE и именем для объекта. Используя флажок PAGE_READWRITE, процесс будет иметь разрешение чтения - записи в память через посредство любых представлений данных файла, которые создаются.

Процесс затем использует дескриптор объекта "проекция файла", возвращенный CreateFileMapping при вызове MapViewOfFile, чтобы создать представление файла в адресном пространстве процесса. Функция MapViewOfFile возвращает указатель на представление данных файла.

Когда процессу больше не нужен доступ к объекту "проекция файла в память", он должен вызвать функцию CloseHandle. Когда все дескрипторы закрыты, система может освободить секцию файла подкачки, используемого объектом.

#include <windows.h> #include <stdio.h> #include <conio.h> #define BUF_SIZE 256TCHAR szName[]=TEXT("MyFileMappingObject");TCHAR szMsg[]=TEXT("Message from first process"); void main(){ HANDLE hMapFile; LPCTSTR pBuf; hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, // использование файла подкачки NULL, // защита по умолчанию PAGE_READWRITE, // доступ к чтению/записи 0, // макс. размер объекта BUF_SIZE, // размер буфера szName); // имя отраженного в памяти объекта if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE) { printf("Не может создать отраженный в памяти объект (%d).\n", GetLastError()); return; } pBuf = (LPTSTR) MapViewOfFile(hMapFile, // дескриптор отраженного // в памяти объекта FILE_MAP_ALL_ACCESS, // разрешение чтения/записи 0, 0, BUF_SIZE); if (pBuf == NULL) { printf("Представление проецированного файла невозможно (%d).\n", GetLastError()); return; } CopyMemory((PVOID)pBuf, szMsg, strlen(szMsg)); getch(); UnmapViewOfFile(pBuf); CloseHandle(hMapFile);}

Второй просесс

Второй процесс может получить доступ к одним и тем же данным при помощи вызова функции OpenFileMapping с тем же самым именем, что и первый процесс. Он может затем использовать функциюMapViewOfFile, чтобы получить указатель на представление данных файла.

#include <windows.h> #include <stdio.h> #include <conio.h> #define BUF_SIZE 256TCHAR szName[]=TEXT("MyFileMappingObject"); void main(){ HANDLE hMapFile; LPCTSTR pBuf; hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, // доступ к чтению/записи FALSE, // имя не наследуется szName); // имя "проецируемого " объекта if (hMapFile == NULL) { printf("Невозможно открыть объект "проекция файла" (%d).\n", GetLastError()); return; } pBuf = MapViewOfFile(hMapFile, // дескриптор "проецируемого" объекта FILE_MAP_ALL_ACCESS, // разрешение чтения/записи 0, 0, BUF_SIZE); if (pBuf == NULL) { printf("Представление проецированного файла не возможно (%d).\n", GetLastError()); return; } MessageBox(NULL, pBuf, TEXT("Process2"), MB_OK); UnmapViewOfFile(pBuf); CloseHandle(hMapFile);}




Дата публикования: 2015-10-09; Прочитано: 213 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...