Ссобытия
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)