Поделиться через


Функция CallNamedPipeA (winbase.h)

Подключается к каналу типа сообщения (и ожидает, если экземпляр канала недоступен), записывает в канал и считывает его, а затем закрывает канал.

Синтаксис

BOOL CallNamedPipeA(
  [in]  LPCSTR  lpNamedPipeName,
  [in]  LPVOID  lpInBuffer,
  [in]  DWORD   nInBufferSize,
  [out] LPVOID  lpOutBuffer,
  [in]  DWORD   nOutBufferSize,
  [out] LPDWORD lpBytesRead,
  [in]  DWORD   nTimeOut
);

Параметры

[in] lpNamedPipeName

Имя канала.

[in] lpInBuffer

Данные, записываемые в канал.

[in] nInBufferSize

Размер буфера записи в байтах.

[out] lpOutBuffer

Указатель на буфер, который получает данные, считываемые из канала.

[in] nOutBufferSize

Размер буфера чтения в байтах.

[out] lpBytesRead

Указатель на переменную, получающую число байтов, считанных из канала.

[in] nTimeOut

Количество миллисекундах, ожидающего доступности именованного канала. В дополнение к числовым значениям можно указать следующие специальные значения.

Значение Значение
NMPWAIT_NOWAIT
0x00000001
Не ожидает именованного канала. Если именованный канал недоступен, функция возвращает ошибку.
NMPWAIT_WAIT_FOREVER
0xffffffff
Ожидает неограниченное время.
NMPWAIT_USE_DEFAULT_WAIT
0x00000000
Использует время ожидания по умолчанию, указанное в вызове функции CreateNamedPipe .

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Если сообщение, записанное в канал серверным процессом, длиннее nOutBufferSize, CallNamedPipe возвращает значение FALSE, а GetLastError возвращает ERROR_MORE_DATA. Оставшаяся часть сообщения отклоняется, так как CallNamedPipe закрывает дескриптор в канале перед возвратом.

Комментарии

Вызов CallNamedPipe эквивалентен вызову функций CreateFile (или WaitNamedPipe, если CreateFile не удается открыть канал немедленно), TransactNamedPipe и CloseHandle . CreateFile вызывается с флагом доступа GENERIC_READ | GENERIC_WRITE и флаг дескриптора наследуется со значением FALSE.

CallNamedPipe завершается ошибкой , если канал является каналом байтового типа.

Windows 10 версии 1709: каналы поддерживаются только в контейнере приложений, т. е. от одного процесса UWP к другому процессу UWP, который является частью того же приложения. Кроме того, именованные каналы должны использовать синтаксис \\.\pipe\LOCAL\ для имени канала.

Примеры

Пример см. в разделе Транзакции по именованным каналам.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

CloseHandle

CreateFile

CreateNamedPipe

Функции канала

Обзор каналов

TransactNamedPipe

WaitNamedPipe