Opérations de canal anonyme
La fonction CreatePipe crée un canal anonyme et retourne deux Handles : un handle de lecture vers le canal et un handle d’écriture sur le canal. Le handle de lecture a un accès en lecture seule au canal et le handle d’écriture dispose d’un accès en écriture seule au canal. Pour communiquer à l’aide du canal, le serveur de canaux doit passer un handle de canal à un autre processus. En général, cette opération est effectuée par héritage ; autrement dit, le processus permet à un handle d’être hérité par un processus enfant. Le processus peut également dupliquer un handle de canal à l’aide de la fonction DuplicateHandle et l’envoyer à un processus non lié à l’aide d’une forme de communication interprocessus, telle que DDE ou la mémoire partagée.
Un serveur de canaux peut envoyer le descripteur de lecture ou le descripteur d’écriture au client du canal, selon que le client doit ou non utiliser le canal anonyme pour envoyer des informations ou recevoir des informations. Pour lire à partir du canal, utilisez la poignée de lecture du canal dans un appel à la fonction ReadFile . L’appel à ReadFile retourne lorsqu’un autre processus a écrit sur le canal. L’appel ReadFile peut également retourner si tous les descripteurs d’écriture du canal ont été fermés ou si une erreur se produit avant la fin de l’opération de lecture.
Pour écrire dans le canal, utilisez le handle d’écriture du canal dans un appel à la fonction WriteFile . L’appel WriteFile ne retourne pas jusqu’à ce qu’il ait écrit le nombre d’octets spécifié dans le canal ou qu’une erreur se produise. Si la mémoire tampon du canal est pleine et qu’il y a plus d’octets à écrire, WriteFile ne retourne pas jusqu’à ce qu’un autre processus Lise à partir du canal, ce qui rend plus l’espace de mémoire tampon disponible. Le serveur de canaux spécifie la taille de la mémoire tampon pour le canal lorsqu’il appelle CreatePipe.
Les opérations de lecture et d’écriture asynchrones (avec chevauchement) ne sont pas prises en charge par les canaux anonymes. Cela signifie que vous ne pouvez pas utiliser les fonctions ReadFileEx et WriteFileEx avec des canaux anonymes. En outre, le paramètre lpOverlapped de ReadFile et WriteFile est ignoré lorsque ces fonctions sont utilisées avec des canaux anonymes.
Un canal anonyme existe jusqu’à ce que tous les descripteurs de canal, en lecture et en écriture, aient été fermés. Un processus peut fermer ses descripteurs de canal à l’aide de la fonction CloseHandle . Tous les descripteurs de canal sont également fermés lorsque le processus se termine.
Les canaux anonymes sont implémentés à l’aide d’un canal nommé portant un nom unique. Par conséquent, vous pouvez souvent transmettre un handle à un canal anonyme vers une fonction qui requiert un handle vers un canal nommé.