Partager via


Fonctions d’entrée et de sortie de console de haut niveau

Les fonctions ReadFile et WriteFile, ou les fonctions ReadConsole et WriteConsole, permettent à une application de lire l’entrée de console et d’écrire la sortie de la console en tant que flux de caractères. Les fonctions ReadConsole et WriteConsole se comportent exactement comme les fonctions ReadFile et WriteFile, sauf qu'elles peuvent être utilisées soit comme des fonctions à caractères larges (dans lesquelles les arguments texte doivent utiliser Unicode), soit comme des fonctions ANSI (dans lesquelles les arguments texte doivent utiliser les caractères du jeu de caractères Windows). Les applications qui doivent maintenir un seul ensemble de sources pour prendre en charge le jeu de caractères Unicode ou ANSI doivent utiliser les fonctions ReadConsole et WriteConsole.

Les fonctions ReadConsole et WriteConsole ne peuvent être utilisées qu'avec des descripteurs de console ; les fonctions ReadFile et WriteFile peuvent être utilisées avec d'autres descripteurs (tels que des fichiers ou des pipes). Les fonctions ReadConsole et WriteConsole échouent si elles sont utilisées avec un descripteur standard qui a été redirigée et n'est plus un descripteur de console.

Pour obtenir une entrée de clavier, un processus peut utiliser les fonctions ReadFile ou ReadConsole avec une poignée vers la mémoire tampon d'entrée de la console, ou il peut utiliser la fonction ReadFile pour lire l'entrée à partir d'un fichier ou d'un pipe s'il STDIN été redirigé. Ces fonctions renvoient uniquement les événements de clavier qui peuvent être traduits en caractères ANSI ou Unicode. L’entrée qui peut être renvoyée inclut des combinaisons de touches de contrôle. Les fonctions ne renvoient pas d’événements de clavier impliquant les touches de fonction ou les touches de direction. Les événements d’entrée générés par la souris, la fenêtre, la mise au point ou l’entrée de menu sont ignorés.

Si le mode d'entrée de ligne est activé (mode par défaut), les fonctions ReadFile et ReadConsole ne renvoient pas à l'application appelante tant que la touche ENTRÉE n'est pas appuyée. Si le mode d’entrée de ligne est désactivé, les fonctions ne renvoient pas tant qu’au moins un caractère n’est pas disponible. Dans l’un ou l’autre mode, tous les caractères disponibles sont lus tant qu’aucune autre touche n’est disponible ou que le nombre spécifié de caractères a été lu. Les caractères non lus sont mis en mémoire tampon jusqu’à l’opération de lecture suivante. Les fonctions signalent le nombre total de caractères réellement lus. Si le mode d’entrée d’écho est activé, les caractères lus par ces fonctions sont écrits dans la mémoire tampon d’écran active à la position actuelle du curseur.

Un processus peut utiliser les fonctions WriteFile ou WriteConsole pour écrire dans une mémoire tampon d’écran active ou inactive, ou utiliser la fonction WriteFile pour écrire dans un fichier ou un pipe si STDOUT a été redirigé. Le mode de sortie traité et le mode de sortie retour à la ligne en fin de ligne contrôlent la manière dont les caractères sont écrits ou renvoyés à une mémoire tampon d’écran.

Les caractères écrits par les fonctions WriteFile ou WriteConsole, ou renvoyés par les fonctions ReadFile ou ReadConsole, sont insérés dans une mémoire tampon de l'écran à la position actuelle du curseur. Au fur et à mesure que chaque caractère est écrit, la position du curseur passe à la cellule de caractère suivante ; cependant, le comportement à la fin d'une ligne dépend du mode de sortie retour à la ligne en fin de ligne de la mémoire tampon de l'écran de la console.

Les séquences de terminaux virtuels permettent d'obtenir plus de détails sur la position du curseur, en particulier dans la catégorie de l'état de requête pour trouver la position actuelle et dans la catégorie du positionnement du curseur pour définir la position actuelle. Vous pouvez également utiliser la fonction GetConsoleScreenBufferInfo pour déterminer la position actuelle du curseur et la fonction SetConsoleCursorPosition pour définir la position du curseur. Toutefois, le mécanisme des séquences de terminaux virtuels est privilégié pour tous les développements nouveaux et en cours. Pour plus de détails sur la stratégie qui sous-tend cette décision, consultez la documentation sur les fonctions classiques et les terminaux virtuels ainsi que la feuille de route de l'écosystème.

Pour obtenir un exemple d'utilisation des fonctions d'E/S de console de haut niveau, consultez la section Utilisation des fonctions d'entrée et de sortie de haut niveau.