Для получения информации о режимах работы и состоянии именованного канала используются функции:
GetNamedPipeHandleState;
GetNamedPipeInfo;
Изменение состояния именованного канала.
Изменить состояние именованного канала можно посредством функции
SetNamedPipeHandleState;
Обмен данными по именованному каналу.
Как и в случае с анонимным каналом, для обмена данными по именованному каналу используются функции ReadFile и WriteFile, но с одним отличием, которое заключается в следующем. Так как в случае именованного канала разрешен асинхронный обмен данными, то в функциях ReadFile и WriteFile может использоваться параметр lpOverlapped при условии, что в вызове функции CreateNamedPipe в параметре dwOpenMode был установлен флаг FILE_FLAG_OVERLAPPED.
Для асинхронного ввода-вывода по именованному каналу могут также использоваться функции ReadFileEx и WriteFileEx.
Для копирования данных из именованного канала используется функция PeekNamedPipe, которая копирует данные в буфер, не удаляя их из канала. Эта функция имеет следующий прототип:
PeekNamedPipe
Для обмена сообщениями по сети может также использоваться функция TransactNamedPipe, которая объединяет операции записи и чтения в одну операцию (транзакцию) и имеет следующий прототип:
|
|
TransactNamedPipe
Параметры этой функции аналогичны параметрам функций ReadFile и WriteFile. Отметим, что функция TransactNamedPipe может использоваться только в том случае, если сервер при создании именованного канала установил флаги PIPE_TYPE_MESSAGE и PIPE_READMODE_MESSAGE.
Для передачи единственной транзакции по именованному каналу используется функция CallNamedPipe.
После завершения обмена данными по именованному каналу, потоки должны закрыть дескрипторы экземпляров именованного канала, используя функцию CloseHandle.