Operaciones de canalización anónimas
La función CreatePipe crea una canalización anónima y devuelve dos identificadores: un identificador de lectura para la canalización y un identificador de escritura en la canalización. El identificador de lectura tiene acceso de solo lectura a la canalización y el identificador de escritura tiene acceso de solo escritura a la canalización. Para comunicarse mediante la canalización, el servidor de canalización debe pasar un identificador de canalización a otro proceso. Normalmente, esto se hace a través de la herencia; es decir, el proceso permite que un proceso secundario herede el identificador. El proceso también puede duplicar un identificador de canalización mediante la función DuplicateHandle y enviarlo a un proceso no relacionado mediante alguna forma de comunicación entre procesos, como DDE o memoria compartida.
Un servidor de canalización puede enviar el identificador de lectura o el identificador de escritura al cliente de canalización, en función de si el cliente debe usar la canalización anónima para enviar información o recibir información. Para leer desde la canalización, use el identificador de lectura de la canalización en una llamada a la función ReadFile . La llamada ReadFile devuelve cuando otro proceso se ha escrito en la canalización. La llamada ReadFile también puede devolver si se han cerrado todos los identificadores de escritura de la canalización o si se produce un error antes de que se haya completado la operación de lectura.
Para escribir en la canalización, use el identificador de escritura de la canalización en una llamada a la función WriteFile . La llamada a WriteFile no se devuelve hasta que haya escrito el número especificado de bytes en la canalización o se produzca un error. Si el búfer de canalización está lleno y hay más bytes que se van a escribir, WriteFile no devuelve hasta que otro proceso lee de la canalización, lo que hace que haya más espacio de búfer disponible. El servidor de canalización especifica el tamaño del búfer para la canalización cuando llama a CreatePipe.
Las operaciones asincrónicas (superpuestas) de lectura y escritura no son compatibles con canalizaciones anónimas. Esto significa que no puede usar las funciones ReadFileEx y WriteFileEx con canalizaciones anónimas. Además, el parámetro lpOverlapped de ReadFile y WriteFile se omite cuando estas funciones se usan con canalizaciones anónimas.
Existe una canalización anónima hasta que se hayan cerrado todos los identificadores de canalización, tanto de lectura como de escritura. Un proceso puede cerrar sus identificadores de canalización mediante la función CloseHandle . Todos los identificadores de canalización también se cierran cuando finaliza el proceso.
Las canalizaciones anónimas se implementan mediante una canalización con nombre con un nombre único. Por lo tanto, a menudo puede pasar un identificador a una canalización anónima a una función que requiere un identificador para una canalización con nombre.