Программирование для Windows NT (том 2)

       

Функция PeekNamedPipe


Чтение данных из канала функцией ReadFile вызывает удаление прочитанных данных. В противоположность этому, функция PeekNamedPipe позволяет получить данные из именованного или анонимного канала без удаления, так что при последующих вызовах этой функции или функции ReadFile будут получены все те же данные, что и при первом вызове функции PeekNamedPipe.

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

Прототип функции PeekNamedPipe представлен ниже:

BOOL PeekNamedPipe(

  HANDLE  hPipe,     // идентификатор канала Pipe

  LPVOID  lpvBuffer, // адрес буфера для прочитанных данных

  DWORD   cbBuffer,  // размер буфера прочитанных данных

  LPDWORD lpcbRead,  // адрес переменной, в которую будет

                     // записано количество действительно

                     // прочитанных байт данных

  LPDWORD lpcbAvail, // адрес переменной, в которую будет

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

                     // доступных в канале для чтения

  LPDWORD lpcbMessage); // адрес переменной, в которую будет

                     // записано количество непрочитанных

                     // байт в данном сообщении

Через параметр hPipe функции PeekNamedPipe нужно передать идентификатор открытого анонимного или именованного канала Pipe.

Данные, полученные из канала, будут записаны в буфер lpvBuffer, имеющий размер cbBuffer байт. При этом количество действительно прочитанных байт будет сохранено в переменной, адрес которой передается функции PeekNamedPipe через параметр lpcbRead.

В случае успешного завершения функция PeekNamedPipe возвращает значение TRUE, а при ошибке - FALSE. Код ошибки можно получить, вызвав функцию GetLastError.



Содержание раздела