Partager via


Opérations de canal anonyme

La fonction CreatePipe crée un canal anonyme et retourne deux handles : un handle de lecture au 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. Généralement, cela se fait par héritage ; autrement dit, le processus permet au 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 interprocess, 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 . L’appel ReadFile retourne quand un autre processus a écrit dans le canal. L’appel ReadFile peut également retourner si tous les handles d’écriture dans le 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 tant qu’il n’a pas écrit le nombre d’octets spécifié dans le canal ou qu’une erreur se produit. Si la mémoire tampon du 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 de mémoire 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 (qui se chevauchent) 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, en lecture et en écriture, aient été fermés. Un processus peut fermer ses poignées de canal à l’aide de la fonction CloseHandle . Tous les handles de canal sont également fermés 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 à une fonction qui nécessite un handle à un canal nommé.