Способы взаимодействия процессов

Ссобытия

HANDLE CreatEveut(LPSECURITY ATTRIBUTES ProcAttr,

BOOL ManualReset,

BOOL InitState,

LPCTSTR Name)

1) параметры безопасности

2) есть два типа событий: ручной и автоматический сброс

3) начальное состояние события

4) системное имя объекта

BOOL [Set/Reset]Eveut(HANDLE h)

установить / сбросить событие.

1) Общие файлы

HANDLE CreateFile(

LPCTSTR Name, // имя файла

DWORD DesiredAccess, //требуемый режим доступа

DWORD SharedMode,//какой режим совместного использования //мы допускаем: 0 – никакого доступа, FILE_SHARE_READ – параллельное чтение,

//FILE_SHARE_WRITE – писать, FILE_SHARE_DELETE – удалить

LPSECURITY ATTRIBUTES ProcAttr,//атрибуты безопасности

DWORD CreationFlag,//что мы хотим сделать с физическим //файлом на диске: OPEN_EXISTING – открыть существующий файл, //CREATE_ALWAYS – создавать всегда, CREATE_NEW, OPEN_ALWAYS, //TRUNCATE_ EXISTING – если файл есть, он будет открыт – содержимое //уничтожено, если нет, то нет.

DOWRD FlagsAttr,

//FILE_ATTRIBUTE_ARCHIVE, FILE_ATTRIBUTE_READONLY,

//FILE_ATTRIBUTE_HIDDEN, FILE_ATTRIBUTE_SYSTEM,

//FILE_ATTRIBUTE_TEMPORARY – временный файл,

// FILE_ATTRIBUTE_OFFLINE, FILE_ATTRIBUTE_ENCRYPTED,

//Флаги: FILE_FLAG_DELETE_ON_CLOSE, FILE_FLAG_NO_BUFFERING,

// FILE_FLAG_OPEN_REPARSE_POINT, FILE_FLAG_OVERLAPPED,

// FILE_FLAG_RANDOM_ACCESS – подсказка ОС, что мы будем читать и писать в //случайных местах

// FILE_FLAG_SEQUENTIAL_SCAN – последовательно читать и писать

// FILE_FLAG_WRITE_THROUGH – не кэшировать, только запись

DWORD Bytes,

HANDLE hTemplate)

Чтение из файла:

BOOL ReadFile(

HANDLE h,

LPVOID Buf, //куда читать

DWORD BytesToRead,//сколько хотим прочитать

LPDWORD BytesRead,//сколько реально прочитали

LPOVERLAPPED ov

)

Запись в файл:

BOOL WriteFile(

HANDLE h,

LPVOID Buf,

DWORD BytesToWrite,..сколько хотим записать

LPDWORD BytesWrite,//сколько реально записали

LPOVERLAPPED ov

)

2) отображение файлов на память.

Создать специальный объект отображения.

HANDLE CreateFileMapping(

HANDLE hfile,// дескриптор системного файла

LPSECURITY ATTRIBUTES ProcAttr,//атрибуты безопасности

DWORD protect, // атрибуты защиты страницы:

//PAGE_READONLY, PAGE_WRITECOPY

DWORD maxsizehigh,

DWORD maxsizelow,

LPCTSTR sysname) // системное имя

INVALID_HANDLE

создаем участок общей памяти:

LPVOID MapViewOfFile(

HANDLE hmap,

DWORD access // параметр доступа

DWORD ofshigh, // начальное смещение

DWORD ofslow,

DWORD bytestomap)..длина отображения

Начинать отображения можно только с границы гранулярности.

Процедура отображения:

BOOL UnmapViewOfFile(LPVOID Ptr)

Именованные каналы.

Каналы – способ локального и сетевого взаимодействия.

1) функции сервера

2) функции клиента

Каналы должны быть с одним именем.

1. СЕРВЕР

Создать канал: HANDLE CreateNamePipe(

LPCTSRT pipename,

DWORD openmode, // режим открытия

DWORD pipemode,

DWORD maxinstance,

DWORD outbufsize,

DWORD inbufsize,

LPSECURITY ATTRIBUTES ProcAttr,//атрибуты безопасности

)

Имя канала: \\.\pipe\<имя > - до 256 символов

FILE_FLAG_FIRST_PIPE_INSTANCE – может присутствовать во втором параметре:

PIPE_ACCESS_DUPLEX, PIPE_ACCESS_INBOUND, PIPE_ACCESS_OUTBOUND

FILE_FLAG_WRITE_THROUGH – если процессы находятся на разных машинах в сети

FILE_FLAG_OVERLAPPED – асинхронный режим (для канала)

PIPE_TYPE_BYTE и PIPE_TYPE_MESSAGE – каждая запись в канал – пакет

PIPE_READMODE_BYTE, PIPE_READMODE_MESSAGE

MAXINSTANCES – max допустимое число каналов с таким именем

PIPE_UNLIMITED_INSTANCES

DEFOULTTimeout – время ожидания

Серверная сторона

CREATE_NAMED_PIPE

BOOL ConnectNamePipe(HANDLE h, LPOVERLAPPED Ov)

BOOL DisconnectNamedPipe(HANDLE h)

2. КЛИЕНТ

BOOL WiatNamedPipe(LPCTSTR Name, DWORD TimeOut)

Подключиться к каналу:

CreateFile

В виде имени – имя канала \\<pc>\piep\<имя>

BOOL CallNamedPipe(

LPCTSTR NamePipe, //имя канала

LPVOID InBuf, // входные параметры

DWORD InSize, // сколько будет отправлено байт

LPVOID OutBuf, // выходной результат

DWORD OutSize, // полный размер буфера

LPDWORD BytesRead, // сколько реально прочитано

DWORD TimeOut)



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: