Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora_po_sp.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
308.78 Кб
Скачать
  1. Работа с анонимными каналами в Windows

Анонимным каналом называется объект ядра операционной системы, который обеспечивает передачу данных между процессами, выполняющимися на одном компьютере. Процесс, который создает анонимный канал, называется сервером анонимного канала. Процессы, которые связываются с анонимным каналом, называются клиентами анонимного канала. Другими словами можно сказать, что анонимный — это такой канал передачи данных между процессами, который не имеет имени. Следовательно, доступ к такому каналу имеют только родительский процесс-сервер и дочерние процессы-клиенты этого канала. Перечислим характеристики анонимных каналов, которые необходимо учитывать при их использовании для обмена данными между параллельными процессами:

□ не имеют имени;

□ полудуплексные;

□ передача данных потоком;

□ синхронный обмен данными;

□ возможность моделирования любой топологии связей.

Анонимные каналы создаются процессом-сервером при помощи функции createPipe, которая имеет следующий прототип:

BOOL CreatePipe(

PHANDLE hReadHandle, // дескриптор для чтения из канала

PHANDLE hWriteHandle, // дескриптор для записи в канал

LPSEOTRITY_ATTRIBUTES lpPipeAttributes, II атрибуты защиты

DWORD dwSize // размер буфера в байтах

);

При удачном завершении функция CreatePipe возвращает ненулевое значение, а в случае неудачи — false. Рассмотрим кратко назначение параметров этой функции.Так как анонимные каналы не имеют имени, то для соединения процесса- клиента с таким каналом необходимо передать ему один из дескрипторов анонимного канала. При этом передаваемый дескриптор должен быть наследуемым, а сам процесс-клиент должен быть дочерним процессом процесса сервера анонимного канала и наследовать наследуемые дескрипторы процесса-сервера. Наследование дескрипторов анонимного канала определяется значением поля binheritHandie в структуре типа security_attributes, на которую указывает параметр IpPipeAttributes функции CreatePipe. ЕСЛИ значение ЭТОГО ПОЛЯ, которое имеет тип bool, равно true, to дескрипторы анонимного канала создаются наследуемыми, в противном случае — дескрипторы создаются ненаследуемыми.Для обмена данными по анонимному каналу в операционных системах Windows используются те же функции, что для записи/чтения данных в файл. Для записи данных в анонимный канал используется функция writeFile, которая имеет следующий прототип:

BOOL WriteFile(

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

LPCVOID lpBuffer, // буфер данных

DWORD dwNumberOfBytesToWrite, // количество байтов для записи

LPDWORD lpNumberOfBytesWritten, // количество записанных байтов

LPOVERLAPPED lpOverlapped // асинхронный ввод

);

Функция WriteFile записывает в анонимный канал количество байтов, заданных параметром dwNumberOfBytesToWrite, из буфера данных, на который указывает параметр lpBuffer.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]