Лабораторная работа
Передача информации между процессами. С++
Категория: | Лабораторная работа |
Дисциплина: | Системное программирование |
Город: | Беларусь, Минск |
Учебное заведение: | БНТУ, ФИТР |
Тег: | #Системное_программирование |
Стоимость работы: | 16 руб. |
Оценка: | 10 |
Объем страниц: | 12 |
Год сдачи: | 2022 |
Дата публикации: | 14.06.2022 |
* Кроме файла с работой, также есть архив с дополнительными файлами.
Описание дополнительных файлов:
Папка LW-4 — содержит исходный код программы на языке C++
Фрагменты для ознакомления
Лабораторная работа № 4
ПЕРЕДАЧА ИНФОРМАЦИИ МЕЖДУ ПРОЦЕССАМИ
Вариант 06
Цель работы: изучить основы взаимодействия локальных процессов на базе файлов, проецируемых в память.
Изучаемые вопросы:
1. Функции для работы с файлами, отображаемыми в память.
2. Файлы данных, проецируемые в память.
3. Совместный доступ процессов к данным через механизм проецирования.
4. Обработка текстового и графического файлов двумя процессами
5. Работа с файлами больших размеров.
6. Взаимодействие процессов через Page файл.
Постановка задачи:
1. Осуществить обмен текстовыми и графическими данными между двумя приложениямиP1 и P2 с выводом информации в заданную область окна программы.
2. Реализовать обработку процессом файлов больших размеров.
3. Осуществить обмен данными между двумя приложениями P1 и P2 через Page файл с выводом информации в заданную область окна программы.
4.1. Функции для работы с файлами, отображаемыми в память.
Для создания или открытия объект ядра "файл" использовал:
hFile = CreateFileW(FileName, // имя файла
GENERIC_READ, // способ доступа
NULL, // совместный доступ
NULL, // атрибуты доступа
OPEN_EXISTING, // проверка существования
FILE_ATTRIBUTE_NORMAL, // атрибуты не установлены
NULL); // дескриптор временного файла
Для создания объекта ядра “проецируемый файл”:
hMappingFile = CreateFileMappingW(hFile, // дескриптор файла
NULL, // атрибуты доступа
PAGE_READONLY, // атрибут защиты
0, // размер файла в виде
fSize, /*~ 0*/ // 64-разрядного числа
Name); // имя объекта
Чтобы отобразить объект “проецируемый файл” или его часть на адресное пространство процесса, применяется функция:
ptrVoid = MapViewOfFile(hMappingFile, // дескриптор проекции файла
FILE_MAP_READ, // доступ к данным
0, // смещение в файле для отображения
0, // как 64-битное представление
0);/*~ fSize*/ // размер представления
Для открытия объекта ядра «проекция файла» использовал:
hFileMemory = OpenFileMappingW(FILE_MAP_READ,
FALSE, // наследование дескриптора
nameProccess);
Для открепления файла от адресного пространства процесса используется функция:
UnmapViewOfFile(ptrVoid);
Для уничтожения объектов «файл» и «проецируемый файл» использовал:
CloseHandle(hFile);
4.2. Файлы данных, проецируемые в память.
4.3. Совместный доступ процессов к данным через механизм проецирования.
Создаётся два процесса. Второй (additionalLW.exe) процесс вызывается первым и создает страничный файл для хранения массива данных, а первый процесс читает этот страничный файл и выведет данные в элемент управления:
4.4. Обработка текстового и графического файла двумя процессами.
4.5. Работа с файлами больших размеров.
4.6. Взаимодействие процессов через Page файл.
Результаты работы программного обеспечения:

Выводы:
1. Идея проецирования дискового файла в память заключается в том, что для дискового файла выделяется регион виртуального адресного пространства и сопоставляется начало этого региона начальному байту файла. После чего, открывая файл, мы работаем в оперативной памяти в адресном пространстве процесса, а операционная система использует область файла на диске как файл подкачки, автоматически внося в него все производимые изменения.
2. Используют обычно технику проецирования файла в памяти:
- экономии памяти;
- ускорения доступа.
3. Этапы создания проекции файла в памяти:
- Создание или открытие файла при помощи функции CreateFile();
- Создание объекта ядра «проекция файла» CreateFileMapping();
- Проецирование файла на адресное пространство процесса. Для этого предназначена функция MapViewOfFile().
….