Операционные системы. Межпроцессное взаимодействие. Передача информации между процессами через Win32 API
Содержание
- 2. Межпроцессное взаимодействие Передача информации между процессами через Win32 API
- 3. Механизмы межпроцессного обмена (1) DDE (Dynamic Data Exchange) OLE atom (атомы) pipes (анонимные каналы) named pipes
- 4. Механизмы межпроцессного обмена (2)
- 5. Атомы Атомы – самый простой и доступный способ IPC. Идея состоит в том, что процесс может
- 6. Функции Win32 API для работы атомами GlobalAddAtom GlobalGetAtomName GlobalFindAtom GlobalDeleteAtom
- 7. Сообщение WM_COPYDATA Сообщение WM_COPYDATA позволяет приложениям копировать данные между их адресными пространствами. Перед отправкой сообщения WM_COPYDATA
- 8. Пример использования сообщения WM_COPYDATA Отправитель: COPYDATASTRUCT cds; cds.cbData = (DWORD) nSize; cds.lpData = (PVOID) pBuffer; SendMessage
- 9. Каналы Канал представляет собой виртуальное соединение, по которому передается информация от одного процесса к другому. С
- 10. Передача информации между процессами через Win32 API Анонимные каналы
- 11. Анонимные каналы Анонимные каналы не имеют имен. Не пригодны для обмена через сеть. Главная цель –
- 12. Использование анонимных каналов Главная цель – служить каналом между родительским и дочерним процессом или между дочерними
- 13. Создание анонимных каналов BOOL CreatePipe( PHANDLE hReadPipe, //дескриптор конца чтения канала PHANDLE hWritePipe, //дескриптор конца записи
- 14. Пример использования анонимного канала Создаем анонимный канал с помощью CreatePipe (). Подготавливаем строку параметров для дочернего
- 15. Проверка наличия данных без считывания С помощью функции PeekNamedPipe () есть возможность проверить наличие данных в
- 16. Передача информации между процессами через Win32 API Именованные каналы
- 17. Именованные каналы Named Pipe File System является виртуальной файловой системой, которая управляет именованными каналами. Каналы named
- 18. Формат имени канала \\.\pipe\[path]pipename \\computer_name\pipe\[path]pipename
- 19. Создание именованного канала HANDLE CreateNamedPipe ( LPCTSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize,
- 20. Параметры создания канала lpName – имя именованного канала; dwOpenMode – направление передачи данных (PIPE_ACCESS_DUPLEX, PIPE_ACCESS_INBOUND, PIPE_ACCESS_OUTBOUND);
- 21. Режимы передачи PIPE_TYPE_BYTE, PIPE_TYPE_MESSAGE – данные записываются в канал как поток байт или как сообщения PIPE_READMODE_BYTE,
- 22. Подключение к именованному каналу BOOL ConnectNamedPipe ( HANDLE hNamedPipe, LPOVERLAPPED lpOverlapped ); BOOL DisconnectNamedPipe ( HANDLE
- 23. Работа с каналом на стороне сервера После того как канал создан, сервер подключается к нему с
- 24. Пример клиент-серверного приложения (сервер) HANDLE hPipe = CreateNamedPipe("\\.\\pipe\\PipeSrv",PIPE_ACCESS_DUPLEX | WRITE_DAC, PIPE_TYPE_BYTE,1,100,100,100,NULL); if (hPipe==INVALID_HANDLE_VALUE) { …//Обработка ошибки
- 25. Работа с каналом на стороне клиента Клиенты производят подключение к каналу посредством вызова функции Create File
- 26. Пример клиент-серверного приложения (клиент) … char szName [] = “\\ServerName\pipe\PipеSrv”; HANDLE hFile = CreateFile(szName,GENERIC_READ | GENERIC_WRITE,
- 27. Реализация нескольких экземпляров канала При помощи одного и того же канала сервер может одновременно обслуживать нескольких
- 28. Установление гарантированного соединения со стороны клиента Для установления гарантированного подключения клиента к именованному каналу перед вызовом
- 29. Функция WaitNamedPipe BOOL WaitNamedPipe ( LPCTSTR lpNamedPipeName, //имя канала DWORD nTimeOut // интервал ожидания ); NMPWAIT_USE_DEFAULT_WAIT
- 30. Определение наличия данных в канале С помощью функции PeekNamedPipe () процесс-читатель может также определить, имеются ли
- 31. Функция PeekNamedPipe BOOL PeekNamedPipe( HANDLE hNamedPipe, //дескриптор канала LPVOID lpBuffer, //адрес буфера для чтения //(если проверяется
- 32. Передача информации между процессами через Win32 API Почтовые ящики
- 33. Почтовые ящики (MailSlots) Mailslot является одним из механизмов, предназначенных для осуществления обмена данными между процессами. При
- 34. Формат имени сервера \\.\mailslot\[path]name \\ComputerName\mailslot\[path]name \\*\mailslot\[path]name \\DomainName\mailslot\[path]name
- 35. Создание почтового ящика на сервере HANDLE CreateMailslot ( LPCTSTR lpName, //имя ящика DWORD nMaxMessageSize, //максимальный размер
- 36. Пример создания сервера HANDLE hSlot = NULL; hSlot = CreateMailslot ("\\\\computername\\mailslot\\messngr", 0, MAILSLOT_WAIT_FOREVER, NULL); if (hSlot
- 37. Открытие клиентом почтового ящика HANDLE hSlot = CreateFile(("\\\\computername\\mailslot\\messngr", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hSlot
- 38. Ошибка открытия ящика В MSDN указано, что если клиент открывает слот прежде чем слот был создан
- 39. Использование mailslot Использование почтовых ящиков особенно удобно в системах «клиент-сервер», работающих в пределах локальной сети. Кроме
- 40. Получение информации о почтовом ящике BOOL GetMailslotInfo ( HANDLE hMailslot, //указатель на слот LPDWORD lpMaxMessageSize, //максимальный
- 41. Изменение настроек почтового ящика BOOL SetMailslotInfo( HANDLE hMailslot, DWORD lReadTimeout );
- 42. Передача информации между процессами через Win32 API Другие механизмы
- 43. Удаленный вызов процедур (RPC) RPC (Remote Procedure Call) – это API, позволяющий приложению удаленно вызывать функции
- 44. Сокеты (программные гнезда) Взаимодействие процессов на основе сокетов (программных гнезд) основано на модели «клиент-сервер».
- 45. Типы сокетов Выделяются два типа сокетов – с виртуальным соединением (stream sockets) и датаграммные сокеты (datagram
- 46. Сокеты или именованные каналы Если процессы работают на одном компьютере или в рамках одной быстродействующей локальной
- 47. Стандарт MPI В вычислительных системах с распределенной памятью процессоры работают независимо друг от друга. Для организации
- 48. Модель SPMP В рамках MPI принят простой подход – для решения задачи разрабатывается одна программа, которая
- 50. Скачать презентацию