|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Named Pipe Operations
The first time the server calls CreateNamedPipe, the function specifies the maximum number of instances of the pipe that can exist simultaneously. Limited by this maximum, the server can call CreateNamedPipe repeatedly to create additional instances of the pipe. If the function succeeds, each call returns a handle to the server end of a named pipe instance.
As soon as a pipe instance is created, a client process can connect to it by calling the CreateFile or CallNamedPipe function. If a pipe instance is available, CreateFile returns a handle to the client end of the pipe instance. If no instances of the pipe are available, a client process can use the WaitNamedPipe function to wait for one to become available. A client process can also use CallNamedPipe to combine into a single operation the functions that connect to a pipe instance (waiting for one to be available, if necessary), write a message, read a message, and close its pipe handle. CallNamedPipe can be used only by a client process and only with a message-type pipe.
A server process specifies a handle to a pipe instance in a call to the ConnectNamedPipe function to determine when a client process is connected to it. If the pipe handle is in blocking mode, the ConnectNamedPipe operation does not return until a client is connected. Client and server processes can call one of several functions ѕ in addition to CallNamedPipe ѕ to read from and write to a named pipe. The behavior of these functions depends on the type of pipe and the modes in effect for the specified pipe handle, as follows:
· The ReadFile and WriteFile functions can be used with either byte-type or message-type pipes. · The ReadFileEx and WriteFileEx functions can be used with either byte-type or message-type pipes if the pipe handle was opened for overlapped operations. · The PeekNamedPipe function can be used to read without removing the contents of either a byte-type pipe or a message-type pipe. PeekNamedPipe can also return additional information about the pipe instance.
· The TransactNamedPipe function can be used with message-type pipes if the pipe handle of the calling process is set to message-read mode. The function writes a request message and reads a reply message in a single operation, enhancing network performance.
For a pipe handle in byte-read mode, a read operation is completed successfully when all available bytes in the pipe are read or when the specified number of bytes is read. For a pipe handle in message-read mode, a ReadFile or ReadFileEx operation is completed successfully only when the entire message is read. If the specified number of bytes to read is less than the size of the next message, the function reads as much of the message as possible before returning FALSE (with the GetLastError function returning ERROR_MORE_DATA). However, the remainder of the message can be read by making additional calls to ReadFile, ReadFileEx, or PeekNamedPipe. Note that PeekNamedPipe returns TRUE after reading a complete or partial message, and it reports the number of bytes remaining in a partially read message.
For a message-type pipe with multiple unread messages, a read operation using a message-read pipe handle returns after reading one message. An operation using a byte-read handle does not distinguish between the messages ѕ it reads all available bytes up to the specified number. When a client and server finish using a pipe instance, the server calls the DisconnectNamedPipe function to close the connection to the client process. This function makes the client's handle invalid (if it has not already been closed). Any unread data in the pipe is discarded. To ensure that all bytes or messages written to the pipe are read by the client, the server first calls the FlushFileBuffers function, which does not return until the client has read all data from the pipe. After the client is disconnected, the server calls the CloseHandle function to close its handle to the pipe instance. Alternatively, the server can use ConnectNamedPipe to enable a new client to connect to this instance of the pipe.
A process can retrieve information about a named pipe by calling the GetNamedPipeInfo function, which returns the type of the pipe, the size of the input and output buffers, and the maximum number of pipe instances that can be created. The GetNamedPipeHandleState function reports on the read and wait modes of a pipe handle, the current number of pipe instances, and additional relevant information for pipes that communicate over a network. The SetNamedPipeHandleState function sets the read mode and wait modes of a pipe handle. For client processes communicating with a remote server, the function also controls the maximum number of bytes to collect or the maximum time to wait before transmitting a message (assuming the client's handle was not opened with write-through mode enabled).
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Поименованные Действия Трубы
Сначала вызовы сервера CreateNamedPipe, функция определяет максимальное количество примеров трубы, которая может просуществовать одновременно. Ограниченное этим максимумом, сервер может назвать CreateNamedPipe многократно, чтобы создавать дополнительные примеры трубы. Если функция добивается успеха, каждый вызов возвращает ручку в конец сервера поименованного примера трубы.
Как только пример трубы будет создан, процесс клиента может подключить к этому вызывая CreateFile или функция CallNamedPipe. Если пример трубы доступен, CreateFile возвращает ручку в конец клиента примера трубы. Если никакие примеры трубы не доступны, процесс клиента может использовать функцию WaitNamedPipe, чтобы ждать один, чтобы становиться доступным. Процесс клиента может также использовать CallNamedPipe, чтобы объединяться на единственную операцию функции, которые подключают к примеру трубы (ожидание один, чтобы быть доступно, если необходимый), записывать сообщение, читать сообщение и закрывать свою ручку трубы. CallNamedPipe МОЖЕТ использоваться только процессом клиента и только с сообщением-типом трубы.
Процесс сервера определяет ручку в пример трубы на вызове в функцию ConnectNamedPipe, чтобы определяться когда процесс клиента подключен к этому. Если ручка трубы - в блокировке режима, операция ConnectNamedPipe не возвращается пока клиент не будет связан. Клиент и процессы сервера могут вызвать одна из нескольких функций U дополнительно к CallNamedPipe U, чтобы читаться из и записываться в поименованную трубу. Поведение этих функций зависит от типа трубы и режимы в силе для определенной ручки трубы, следующим образом:
ReadFile И функции WriteFile могут быть использованы с байтовым-сообщением-типом типа или труб. ReadFileEx И функции WriteFileEx могут быть использованы с байтовым-типом или сообщением-тип труб если ручка трубы была открыта для перекрытых операций. Функция PeekNamedPipe может быть использована, чтобы не читать удаляя содержание или байтовый тип трубы или сообщение-тип трубы. PeekNamedPipe МОЖЕТ также возвращать дополнительную информацию о примере трубы.
Функция TransactNamedPipe может быть использована сообщением-типом труб если ручка трубы вызывающего процесса установлена в сообщение-прочитавшее режим. Функция записывает сообщение запроса и читает сообщение ответа на единственной операции, повышая сетевое исполнение.
Для ручки трубы в байте-прочитавшем режим, операция чтения завершается успешно когда все доступные байты в трубе прочитаны или когда определенное количество байтов прочитано. Для ручки трубы в сообщении-прочитавшем режим, ReadFile или операция ReadFileEx завершается успешно только когда целое сообщение прочитано. Если определенное количество байтов, чтобы читать, - менее чем размер следующего сообщения, функция читает как большинство сообщения по возможности перед обратной ЛОЖЬЮ (с функцией GetLastError, возвращать ERROR_MORE_DATA). Тем не менее, разность сообщения может быть прочитана делая дополнительными вызовами на ReadFile, ReadFileEx, или PeekNamedPipe. Отметьте, что ИСТИНА возврата PeekNamedPipe после чтение полное или частичное сообщение, и это сообщает количество байтов, остающихся в частично прочитавшее сообщение.
Для сообщения-типа трубы со многочисленными unread сообщениями, операция чтения, использовавшая сообщение- была прочитана возврат ручки трубы после чтения одного сообщения. Операция, использовавшая байт- была прочитана ручка не различается между сообщениями U это читает все доступные байты вплоть до определенного числа. Когда клиент и конец сервера, использовавшие пример трубы, вызовы сервера функция DisconnectNamedPipe, чтобы закрывать связь в процесс клиента. Эта функция делает инвалидом ручки клиента (если она уже не закрыта). Любые unread данные в трубе отвергнуты. Для того, чтобы гарантировать, что все байты или сообщения записанные в трубу прочитаны клиентом, сервер сначала вызывает функцию FlushFileBuffers, какое не возвращает пока клиент не прочитал все данные из трубы. После того, как клиент будет разъединен, сервер вызывает функцию CloseHandle, чтобы закрывать свою ручку в пример трубы. Кроме того, сервер может использовать ConnectNamedPipe, чтобы приспосабливаться нового клиента, чтобы подключать к этому примеру трубы.
Процесс может извлечь информацию о поименованной трубе вызывая функцию GetNamedPipeInfo, которая возвращает тип трубы, размер входного и выходного буферов, и максимальный номер примеров трубы, которые могут быть созданы. Функция GetNamedPipeHandleState сообщает о чтении и режимах ожидания ручки трубы, последний номер примеров трубы, и дополнительной важной информации для труб, которые связываются над сетью. Функция SetNamedPipeHandleState устанавливает режим чтения и режимов ожидания ручки трубы. Для процессов клиента, передающихся с дистанционным сервером, функция также регулирует максимальное количество байтов, чтобы собирать или максимальное время, чтобы ожидаться перед передачей сообщения (предположим, ручка клиента не была открыта записью-через разблокированный режим).
|
|
|
|
| |