Операционные системы. Учебное пособие. Марапулец Ю.В. - 182 стр.

UptoLike

Составители: 

изменить, чем и отличается от функции GetNamedPipeHandleState(), которая возвращает
атрибуты, изменяемые во время существования канала.
BOOL GetNamedPipeInfo(
HANDLE hNamedPipe, // дескриптор, именованного канала
LPDWORD lpdwType, // тип и флаги сервера
LPDWORD lpdwOutBuf, // размер выходного буфера канала, байты
LPDWORD lpdwInBuf, // размер входного буфера канала, байты
LPDWORD lpdwMaxInstances );// максимальное количество экземпляров канала
Параметр lpdwType может содержать либо один из флагов
PIPE_TYPE_MESSAGE и PIPE_SERVER_END, либо оба флага одновременно. Если ни
один из флагов не установлен, дескриптор подключается к клиентскому концу канала,
который записывает информацию в байтовом режиме. Размеры входного и выходного
буферов задаются функцией CreateNamedPipe().
Параметр lpdwMaxInstances возвращает заданное функцией CreateNamedPipe()
значение, которое определяет максимальное количество экземпляров канала, способных
существовать одновременно.
Обычно при выполнении операции чтения из канала прочитанное сообщение уда-
ляется из буфера. Однако с помощью функции PeekNamedPipe() сообщение можно про-
читать, не удаляя его из буфера. Данная функция работает как с анонимными, так и с
именованными каналами.
BOOL PeekNamedPipe(
HANDLE hPipe, //дескриптор именованного или анонимного канала
LPVOID lpvBuffer, //адрес буфера для получения данных
DWORD dwBufferSize, //размер буфера, байты
LPDWORD lpdwBytesRead, //возвращает количество прочитанных байтов
LPDWORD lpdwAvailable, //возвращает полное количество байтов
LPDWORD lpdwMessage ); //возвращает количество непрочитанных байтов
//данного сообщения
Параметр lpvBuffer указывает место, куда функция PeekNamedPipe() может запи-
сывать информацию, прочитанную из канала. Следует отметить, что функция PeekNa-
medPipe() не сможет прочитать больше байтов, чем задано параметром dwBufferSize,
даже если в канале еще осталась информация.
Параметр lpdwBytesRead возвращает данные о количестве байтов, которые функ-
ция действительно прочитала, а параметр lpdwMessage - данные о количестве байтов,
оставшихся в этом сообщении. Параметр lpdwMessage игнорируется, если канал нахо-
дится в режиме чтения PIPE_READMODE_BYTE.
В этом случае разбивка информации
на сообщения не производится. (Байтовый режим чтения применяется всеми анонимны-
ми каналами.)
Параметр lpdwAvailable возвращает информацию о суммарном количестве бай-
тов, содержащихся во всех сообщениях. Если в данный момент в буфере находится не-
сколько сообщений, значение *lpdwAvailable может превышать сумму значений пара-
метров *lpdwBytesRead и *lpdwMessage.
Допускается возвращение только части информации, с сохранением значения
NULL
для остальных параметров. Например, если вам достаточно иметь информацию
лишь о том, сколько байтов данных находится в буфере, всем параметрам, кроме lpdwA-
vailabie, можно задать значение 0 или NULL.
184
изменить, чем и отличается от функции GetNamedPipeHandleState(), которая возвращает
атрибуты, изменяемые во время существования канала.

BOOL GetNamedPipeInfo(
     HANDLE hNamedPipe,            // дескриптор, именованного канала
     LPDWORD lpdwType,             // тип и флаги сервера
     LPDWORD lpdwOutBuf,           // размер выходного буфера канала, байты
     LPDWORD lpdwInBuf,            // размер входного буфера канала, байты
     LPDWORD lpdwMaxInstances );// максимальное количество экземпляров канала

     Параметр       lpdwType    может    содержать    либо     один   из    флагов
PIPE_TYPE_MESSAGE и PIPE_SERVER_END, либо оба флага одновременно. Если ни
один из флагов не установлен, дескриптор подключается к клиентскому концу канала,
который записывает информацию в байтовом режиме. Размеры входного и выходного
буферов задаются функцией CreateNamedPipe().
     Параметр lpdwMaxInstances возвращает заданное функцией CreateNamedPipe()
значение, которое определяет максимальное количество экземпляров канала, способных
существовать одновременно.
     Обычно при выполнении операции чтения из канала прочитанное сообщение уда-
ляется из буфера. Однако с помощью функции PeekNamedPipe() сообщение можно про-
читать, не удаляя его из буфера. Данная функция работает как с анонимными, так и с
именованными каналами.

BOOL PeekNamedPipe(
     HANDLE hPipe,          //дескриптор именованного или анонимного канала
     LPVOID lpvBuffer,      //адрес буфера для получения данных
     DWORD dwBufferSize,    //размер буфера, байты
     LPDWORD lpdwBytesRead, //возвращает количество прочитанных байтов
     LPDWORD lpdwAvailable, //возвращает полное количество байтов
     LPDWORD lpdwMessage ); //возвращает количество непрочитанных байтов
                            //данного сообщения

      Параметр lpvBuffer указывает место, куда функция PeekNamedPipe() может запи-
сывать информацию, прочитанную из канала. Следует отметить, что функция PeekNa-
medPipe() не сможет прочитать больше байтов, чем задано параметром dwBufferSize,
даже если в канале еще осталась информация.
      Параметр lpdwBytesRead возвращает данные о количестве байтов, которые функ-
ция действительно прочитала, а параметр lpdwMessage - данные о количестве байтов,
оставшихся в этом сообщении. Параметр lpdwMessage игнорируется, если канал нахо-
дится в режиме чтения PIPE_READMODE_BYTE. В этом случае разбивка информации
на сообщения не производится. (Байтовый режим чтения применяется всеми анонимны-
ми каналами.)
      Параметр lpdwAvailable возвращает информацию о суммарном количестве бай-
тов, содержащихся во всех сообщениях. Если в данный момент в буфере находится не-
сколько сообщений, значение *lpdwAvailable может превышать сумму значений пара-
метров *lpdwBytesRead и *lpdwMessage.
      Допускается возвращение только части информации, с сохранением значения
NULL для остальных параметров. Например, если вам достаточно иметь информацию
лишь о том, сколько байтов данных находится в буфере, всем параметрам, кроме lpdwA-
vailabie, можно задать значение 0 или NULL.



                                       184