Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №4

.docx
Скачиваний:
42
Добавлен:
10.03.2021
Размер:
116.79 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Ордена Трудового Красного Знамени

федеральное государственное бюджетное образовательное учреждение

высшего образования

Московский технический университет связи и информатики

----------------------------------------------------------------------------------------------

Кафедра Математической кибернетики и информационных технологий

ЛАБОРАТОРНАЯ РАБОТА № 4

по дисциплине

ОПЕРАЦИОННЫЕ СИСТЕМЫ

«Реализация обмена данными между процессами»

Выполнил:

студент Алгазин П.В.

группа БФИ1601

Проверил:

Королькова Т.В.

ст. пр. кафедры МКиИТ

Дата ___________________________

Москва 2018

Название работы: Реализация обмена данными между процессами.

Цель работы: Изучение набора средств коммуникации процессов в Windows NT. Получение практических навыков по использованию Win32 API для программирования механизмов межпроцессного взаимодействия.

Задание: Программа, выполняющая с помощью ВСЕХ перечисленных механизмов межпроцессного взаимодействия (отображение файлов, почтовые ящики, каналы)

Исходный код:

4 файловое отображение клиент #include <windows.h>  #include <stdio.h>  #include <conio.h>  #include <tchar.h>  #include <iostream>  using namespace std;  #define BUF_SIZE 256  TCHAR szName[]=TEXT("Global\\MyFileMappingObject");  int _tmain()  {  setlocale(LC_ALL, "rus");  HANDLE Event = CreateEventA(NULL, TRUE, FALSE, "First");  HANDLE Event1 = CreateEventA(NULL, TRUE, FALSE, "Second");  HANDLE Event2 = CreateEventA(NULL, TRUE, FALSE, "Ev");  cout«"Ожидание запуска сервера...";  WaitForSingleObject(Event2, INFINITE);  system("cls");  HANDLE hMapFile;  LPCTSTR pBuf;  hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,BUF_SIZE,szName);  pBuf = (LPTSTR) MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,BUF_SIZE);  char a='y';  while (a!='n')  {  cout«"Нахождение транспонированной матрицы 5х5\n";  int mas1[5][5];  int mas2[5][5];  for(int i=0;i<5;i++)  {  cout«"Введите "«i«"-ю строку: ";  for(int j=0;j<5;j++)  cin»mas1[i][j];  }  CopyMemory((PVOID)pBuf, (LPVOID)&mas1, sizeof(mas1));  SetEvent(Event);  WaitForSingleObject(Event1, INFINITE);  ResetEvent (Event1);  double y;  memcpy(&mas2,pBuf,sizeof(mas2));  cout«"\nТранспонированная матрица\n";  for(int i=0;i<5;i++)  {  for(int j=0;j<5;j++)  {  cout«mas2[i][j]«"\t";  }  cout«endl;  }  cout«"Повторить еще раз? [y/n] ";  cin»a;  system("cls");  }  UnmapViewOfFile(pBuf);  CloseHandle(hMapFile);  return 0;  } сервер #include <windows.h>  #include <stdio.h>  #include <conio.h>  #include <tchar.h>  #include <iostream>  using namespace std;  #pragma comment(lib, "user32.lib")  #define BUF_SIZE 256  TCHAR szName[]=TEXT("Global\\MyFileMappingObject");  int _tmain()  {  setlocale(LC_ALL, "rus");  HANDLE Event = CreateEventA(NULL, TRUE, FALSE, "First");  HANDLE Event1 = CreateEventA(NULL, TRUE, FALSE, "Second");  HANDLE Event2 = CreateEventA(NULL, TRUE, FALSE, "Ev");  SetEvent(Event2);  HANDLE hMapFile;  LPCTSTR pBuf;  cout«"Ожидание сообщений\n";  WaitForSingleObject(Event, INFINITE);  hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,szName);  pBuf = (LPTSTR) MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS, 0,0,BUF_SIZE);  while (TRUE)  {  WaitForSingleObject(Event, INFINITE);  int Buffer[5][5];  memcpy(&Buffer,pBuf,sizeof(Buffer));  cout«"Получено сообщение: "«endl;  for(int i=0;i<5;i++)  {  for(int j=0;j<5;j++)  {  cout«Buffer[i][j]«"\t";  }  cout«endl;  }  //Нахождение транспонированной матрицы  int tmp;  for (int i = 0; i < 5; i++)  for (int j = 0; j < i; j++)  {  tmp = Buffer[i][j];  Buffer[i][j] = Buffer[j][i];  Buffer[j][i] = tmp;  }  CopyMemory((PVOID)pBuf, (LPVOID)&Buffer, sizeof(Buffer));  SetEvent(Event1);  ResetEvent (Event);  }  UnmapViewOfFile(pBuf);  CloseHandle(hMapFile);  }

Рисунок 1 - Результат выполнения