Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El servidor de canalización especifica el modo de tipo de canalización, el modo de lectura y el modo de espera en el parámetro dwPipeMode de la función CreateNamedPipe. Los clientes de canalización pueden especificar estos modos de canalización para sus identificadores de canalización mediante la funciónCreateFile.
Modo de tipo
El modo de tipo de una canalización determina cómo se escriben los datos en una canalización con nombre. Los datos se pueden transmitir a través de una canalización con nombre como una secuencia de bytes o como una secuencia de mensajes. El servidor de canalización especifica el tipo de canalización al llamar a CreateNamedPipe para crear una instancia de una canalización con nombre. Los modos de tipo deben ser los mismos para todas las instancias de una canalización.
Para crear una canalización de tipo byte, especifique PIPE_TYPE_BYTE o use el valor predeterminado. Los datos se escriben en la canalización como un flujo de bytes y el sistema no diferencia entre los bytes escritos en distintas operaciones de escritura.
Para crear una canalización de tipo de mensaje, especifique PIPE_TYPE_MESSAGE. El sistema trata los bytes escritos en cada operación de escritura en la canalización como una unidad de mensaje. El sistema siempre realiza operaciones de escritura en canalizaciones de tipo mensaje como si se habilitara el modo de escritura a través.
Modo de lectura
El modo de lectura de una canalización determina cómo se leen los datos de una canalización con nombre. El servidor de canalización especifica el modo de lectura inicial de un identificador de canalización al llamar a CreateNamedPipe. Los datos se pueden leer en modo de lectura de bytes o en modo de lectura de mensajes. Un identificador de una canalización de tipo byte solo puede estar en modo byte-read. Un identificador de una canalización de tipo de mensaje puede estar en modo de lectura de bytes o de lectura de mensajes. Para una canalización de tipo de mensaje, el modo de lectura puede ser diferente para los identificadores de servidor y cliente a la misma instancia de canalización.
Para crear el identificador de canalización en modo de lectura de bytes, especifique PIPE_READMODE_BYTE o use el valor predeterminado. Los datos se leen desde la canalización como un flujo de bytes. Una operación de lectura se completa correctamente cuando se leen todos los bytes disponibles en la canalización o cuando se lee el número especificado de bytes.
Para crear el identificador de canalización en modo de lectura de mensajes, especifique PIPE_READMODE_MESSAGE. Los datos se leen desde la canalización como un flujo de mensajes. Una operación de lectura solo se completa correctamente cuando se lee todo el mensaje. Si el número especificado de bytes que se van a leer es menor que el tamaño del mensaje siguiente, la función lee la mayor parte posible del mensaje antes de devolver cero (la función getLastErrordevuelve ERROR_MORE_DATA). El resto del mensaje se puede leer mediante otra operación de lectura.
Para un cliente de canalización, un identificador de canalización devuelto por CreateFile siempre está en modo de lectura de bytes inicialmente. Tanto los clientes de canalización como los servidores de canalización pueden usar la funciónSetNamedPipeHandleState para cambiar el modo de lectura de un identificador de canalización. El controlador de canalización debe tener el FILE_WRITE_ATTRIBUTES derecho de acceso.
Modo de espera
El modo de espera de un identificador de canalización determina cómo las funciones ReadFile, WriteFiley ConnectNamedPipe administran operaciones largas. En el modo de espera de bloqueo, las funciones esperan indefinidamente un proceso en el otro extremo de la canalización para completar una operación. En modo de espera sin bloqueo, las funciones devuelven inmediatamente en situaciones que, de lo contrario, requerirían una espera indefinida.
Una operación readFile se ve afectada por el modo de espera de un identificador de canalización cuando la canalización está vacía. Con un identificador de espera de bloqueo, la operación no se completa correctamente hasta que los datos estén disponibles desde un subproceso escribiendo en el otro extremo de la canalización. Con un identificador de espera sin bloqueo, la función devuelve cero inmediatamente y la función GetLastError devuelve ERROR_NO_DATA.
Una operación de WriteFile se ve afectada por el modo de espera de un identificador de canalización cuando no hay espacio suficiente en el búfer de la canalización. Con un identificador de espera de bloqueo, la operación de escritura no puede realizarse correctamente hasta que se cree suficiente espacio en el búfer mediante una lectura de subproceso desde el otro extremo de la canalización. Con un identificador de espera sin bloqueo, la operación de escritura devuelve inmediatamente un valor distinto de cero, sin escribir ningún bytes (para una canalización de tipo mensaje) o después de escribir tantos bytes como las suspensiones del búfer (para una canalización de tipo byte).
Una operación de connectNamedPipe se ve afectada por el modo de espera de un identificador de canalización cuando no hay ningún cliente conectado o esperando a conectarse a la instancia de canalización. Con un identificador de espera de bloqueo, la operación de conexión no se realiza correctamente hasta que un cliente de canalización se conecta a la instancia de canalización llamando a la función CreateFile o CallNamedPipe. Con un identificador de espera sin bloqueo, la operación de conexión devuelve cero inmediatamente y la funciónGetLastErrordevuelve ERROR_PIPE_LISTENING.
De forma predeterminada, todos los identificadores de canalización con nombre devueltos por el CreateNamedPipe o función CreateFile se crean con el modo de espera de bloqueo habilitado. Para crear la canalización en modo de espera sin bloqueo, el servidor de canalización especifica PIPE_NOWAIT al llamar a CreateNamedPipe.
Los clientes de canalización y los servidores de canalización pueden cambiar el modo de espera de un controlador de canalización especificando PIPE_WAIT o PIPE_NOWAIT en una llamada a la función SetNamedPipeHandleState.
Nota
El modo de espera sin bloqueo es compatible con Microsoft LAN Manager versión 2.0. Este modo no debe usarse para lograr entradas y salidas superpuestas (E/S) con canalizaciones con nombre. En su lugar, se debe usar la E/S superpuesta, ya que permite que las operaciones con mucho tiempo se ejecuten en segundo plano después de que la función devuelva. Para obtener más información sobre la E/S superpuesta, vea entrada y salida superpuestas y.