- •Методические указания
- •Краматорск, дгма, 2013
- •Содержание
- •Лабораторная работа № 1
- •Теоретические сведения
- •Ход работы
- •Индивидуальное задание
- •Теоретические сведения
- •Литература
- •Лабораторная работа № 2
- •Ход работы
- •Индивидуальное задание
- •Лабораторная работа № 3
- •Теоретические сведения
- •Учебный проект для работы с событиями
- •Учебный проект для работы с событиями
- •Ход работы
- •Индивидуальное задание
- •Лабораторная работа № 4
- •Теоретические сведения
- •Учебный проект
- •Ход работы
- •Индивидуальное задание
- •Лабораторная работа № 4
- •Теоретические сведения
- •Учебный проект
- •Ход работы
- •Индивидуальное задание
- •Лабораторная работа № 6
- •Теоретические сведения
- •Учебный проект
- •Ход работы
- •Индивидуальное задание
- •Лабораторная работа № 7
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 8
- •Теоретические сведения
- •Атрибуты контекста отображения
- •Цвет фона
- •Режим фона
- •Режим рисования
- •Цвет текста
- •Расстояние между буквами
- •Цветовая палитра
- •Начальные координаты кисти
- •Режим закрашивания многоугольников
- •Текущая позиция пера
- •Изображение bitmap
- •Режим растяжения
- •Область ограничения
- •Режим отображения
- •Начало системы координат для окна
- •Начало системы физических координат
- •Масштаб осей для окна
- •Масштаб осей физических координат
- •Учебный проект
- •Ход работы
- •Лабораторная работа № 9
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 10
- •Теоретические сведения
- •Int (*Add)(int); // для адреса функции Add из dll
- •Int (*Sub)(int); // для адреса функции Sub из dll
- •Int *pCount; // для адреса переменной count из dll
- •Ход работы
- •Список рекомендованной литературы
- •Вопросы к экзамену по дисциплине «Операционные системы»
Учебный проект
Первый процесс
Первый процесс создает объект "проекция файла" при помощи вызова функции CreateFileMapping с INVALID_HANDLE_VALUE и именем для объекта. Используя флажок PAGE_READWRITE, процесс будет иметь разрешение чтения - записи в память через посредство любых представлений данных файла, которые создаются.
Процесс затем использует дескриптор объекта "проекция файла", возвращенный CreateFileMapping при вызове MapViewOfFile, чтобы создать представление файла в адресном пространстве процесса. Функция MapViewOfFile возвращает указатель на представление данных файла.
Когда процессу больше не нужен доступ к объекту "проекция файла в память", он должен вызвать функцию CloseHandle. Когда все дескрипторы закрыты, система может освободить секцию файла подкачки, используемого объектом.
#include <windows.h> #include <stdio.h> #include <conio.h>
#define BUF_SIZE 256 TCHAR 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 256 TCHAR 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); } |
