Opérations de canal anonyme
La fonction CreatePipe crée un canal anonyme et retourne deux handles : un handle de lecture dans le canal et un handle d’écriture dans le canal. Le handle de lecture a un accès en lecture seule au canal, et le handle d’écriture a un accès en écriture seule au canal. Pour communiquer à l’aide du canal, le serveur de canal doit passer un handle de canal à un autre processus. En règle générale, cela est effectué via l’héritage ; autrement dit, le processus permet à la poignée d’être héritée par un processus enfant. Le processus peut également dupliquer un handle de canal à l’aide de la fonctionDuplicateHandleet l’envoyer à un processus non lié à l’aide d’une forme de communication interprocesseur, telle que DDE ou la mémoire partagée.
Un serveur de canal peut envoyer le handle de lecture ou le handle d’écriture au client de canal, selon que le client doit utiliser le canal anonyme pour envoyer des informations ou recevoir des informations. Pour lire à partir du canal, utilisez le handle de lecture du canal dans un appel à la fonction ReadFile. Le ReadFile appel retourne lorsqu’un autre processus a écrit dans le canal. L’appel ReadFile peut également retourner si tous les handles 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 WriteFile. L’appel WriteFile ne retourne pas tant qu’il n’a pas écrit le nombre spécifié d’octets dans le canal ou qu’une erreur se produit. Si la mémoire tampon de canal est pleine et qu’il y a plus d’octets à écrire, WriteFile ne retourne pas tant qu’un autre processus ne lit pas à partir du canal, ce qui rend plus d’espace tampon disponible. Le serveur de canal 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 (superposées) 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 handles de canal, à la fois en lecture et en écriture, aient été fermés. Un processus peut fermer ses poignées de canal à l’aide de la fonction CloseHandle. Toutes les poignées de canal sont également fermées lorsque le processus se termine.
Les canaux anonymes sont implémentés à l’aide d’un canal nommé avec un nom unique. Par conséquent, vous pouvez souvent passer un handle à un canal anonyme vers une fonction qui nécessite un handle vers un canal nommé.