Исследование механизмов межпроцессорного взаимодействия

Автор работы: Пользователь скрыл имя, 20 Ноября 2013 в 19:33, курсовая работа

Краткое описание

Целью данной курсовой работы является закрепление и углубление теоретических знаний в области современных операционных систем, приобретение практических навыков разработки клиент-серверных приложений, использующих стандартные механизмы межпроцессного взаимодействия.

Содержание

1. Введение 1
2. Постановка задачи 2
3. Краткие теоретические основы разрабатываемой темы 3
4. Алгоритм работы 6
5. Руководство пользователя 11
6. Результаты работы 12
7. Заключение 13
8. Список использованных источников 13
9. Приложение с исходными кодами разработанных программ 14

Вложенные файлы: 1 файл

kursach5.docx

— 210.23 Кб (Скачать файл)

 

SetEvent(srv1R);

SetEvent(srv2R);

char* file = (char*) MapViewOfFile(fMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);

char mas [256];

unsigned int total, avail;

while (1){

system("cls");

cout<<"\nМЕНЮ\n\n1 - Получить системные цвета и код раскладки клавиатуры\n2 - Получить идентификатор и дескриптор текущего процесса\nq - Выход\n";

switch (getch()){

case '1':

system("cls");

server1 = OpenEvent(EVENT_ALL_ACCESS, 0, L"server1");

if (WaitForSingleObject(server1, 0)==-1){

cout<<"\n\tОШИБКА\n\n\tСервер не подключен\n";

CloseHandle(server1);

getch();

break;

}

ResetEvent(server1);

SetEvent(srv1R);

WaitForSingleObject(server1,-1);

strcpy (mas, file);

cout<<endl<<mas<<endl;

CloseHandle(server1);

getch();

SetEvent(srv1R);

break;

case '2':

system("cls");

server2 = OpenEvent(EVENT_ALL_ACCESS, 0, L"server2");

if (WaitForSingleObject(server2, 0)==-1){

cout<<"\n\tОШИБКА\n\n\tСервер не подключен\n";

CloseHandle(server2);

getch();

break;

}

ResetEvent(server2);

SetEvent(srv2R);

WaitForSingleObject(server2,-1);

strcpy (mas, file);

cout<<endl<<mas<<endl;

CloseHandle(server2);

getch();

SetEvent(srv2R);

break;

case 'q':

UnmapViewOfFile(file);

CloseHandle(fMapping);

CloseHandle(hFile);

SetEvent(srv1R);

SetEvent(srv2R);

return;

}

}}

Сервер 1:

#include <iostream>

#include <conio.h>

#include <windows.h>

using namespace std;

 

HANDLE server1=CreateEvent(NULL, TRUE, TRUE, L"server1"),

srv1R=CreateEvent(NULL,TRUE,FALSE,L"SR1"),fMapping;

 

char* HEXtoSTR(char*str,DWORD N){

sprintf(str, "%x", N);

return str;

}

 

char* ItoSTR(char*str,DWORD N){

sprintf(str,"%d",N);

return str;

}

 

char* ansv(char*str){

str[0]=0;

char buf[16];

DWORD color=GetSysColor(COLOR_3DSHADOW);

strcat(str,"Цвета:\nCOLOR_3DSHADOW: ");

strcat(str,ItoSTR(buf,color%256));

strcat(str,", ");color/=256;

strcat(str,ItoSTR(buf,color%256));

strcat(str,", ");color/=256;

strcat(str,ItoSTR(buf,color%256));

 

color=GetSysColor(COLOR_3DLIGHT);

strcat(str,"\nCOLOR_3DLIGHT: ");

strcat(str,ItoSTR(buf,color%256));

strcat(str,", ");color/=256;

strcat(str,ItoSTR(buf,color%256));

strcat(str,", ");color/=256;

strcat(str,ItoSTR(buf,color%256));

 

HKL hkl=GetKeyboardLayout(0);

strcat(str,"\nКод раскладки клавиатуры: ");

strcat(str,HEXtoSTR(buf,(DWORD)hkl));

return str;

}

 

void refresh(){

fMapping = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, L"Mem");

system("cls");

if(!fMapping){

cout<<"\nКлиент не подключен";

CloseHandle(fMapping);

return;

}

if(!WaitForSingleObject(server1,0)){

cout<<"\nОжидание запроса от клиента";

CloseHandle(fMapping);

return;

}

cout<<"\nЗапрос получен";

char* file = (char*) MapViewOfFile(fMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0),

str[256];

////

ansv(str);

CopyMemory(file,str,256);

////

UnmapViewOfFile(file);

CloseHandle(fMapping);

SetEvent(server1);

}

 

void main (){

setlocale(LC_ALL,"rus");

 

while(1){

refresh();

WaitForSingleObject(srv1R,-1);

ResetEvent(srv1R);

}

// CloseHandle(server1);

}

Сервер 2:

#include <iostream>

#include <conio.h>

#include <windows.h>

using namespace std;

 

HANDLE server2=CreateEvent(NULL, TRUE, TRUE, L"server2"),

srv2R=CreateEvent(NULL,TRUE,FALSE,L"SR2"),fMapping;

 

char* HEXtoSTR(char*str,DWORD N){

sprintf(str, "%x", N);

return str;

}

 

char* ItoSTR(char*str,DWORD N){

sprintf(str,"%d",N);

return str;

}

 

char* ansv(char*str){

str[0]=0;

char buf[16];

 

DWORD procId=GetCurrentProcessId();

strcat(str,"Идентификатор процесса: ");

strcat(str,ItoSTR(buf,procId));

 

HANDLE hndl=OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, procId);

strcat(str,"\nДескриптор процесса: ");

strcat(str,HEXtoSTR(buf,(DWORD)hndl));

CloseHandle(hndl);

 

return str;

}

 

void refresh(){

fMapping = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, L"Mem");

system("cls");

if(!fMapping){

cout<<"\nКлиент не подключен";

CloseHandle(fMapping);

return;

}

if(!WaitForSingleObject(server2,0)){

cout<<"\nОжидание запроса от клиента";

CloseHandle(fMapping);

return;

}

cout<<"\nЗапрос получен";

char* file = (char*) MapViewOfFile(fMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0),

str[256];

////

ansv(str);

CopyMemory(file,str,256);

////

UnmapViewOfFile(file);

CloseHandle(fMapping);

SetEvent(server2);

}

 

void main (){

setlocale(LC_ALL,"rus");

 

while(1){

refresh();

WaitForSingleObject(srv2R,-1);

ResetEvent(srv2R);

}

// CloseHandle(server1);

}


Информация о работе Исследование механизмов межпроцессорного взаимодействия