Un programme s'exécutant dans un terminal texte / console peut manipuler le texte affiché dans sa console de diverses manières (mettre du texte en gras, déplacer le curseur, effacer l'écran, etc.). Cela est accompli en imprimant des séquences de caractères spéciales, appelées "séquences d'échappement" (car elles commencent généralement par Echappement, ASCII 27).
Si stdout est redirigé vers un terminal qui comprend ces séquences d'échappement, l'affichage du terminal changera en conséquence.
Si vous redirigez stdout vers un fichier, les séquences d'échappement apparaîtront dans le fichier (ce qui est généralement ce que vous ne voulez pas).
Il n'existe pas de norme complète pour les séquences d'échappement, mais la plupart des terminaux utilisent les séquences introduites par VT100, avec de nombreuses extensions. C'est ce que la plupart des terminaux sous Unix/Linux (xterm, rxvt, konsole) et d'autres comme PuTTY comprennent.
En pratique, vous ne coderez pas directement des séquences d'échappement dans votre logiciel (bien que vous puissiez le faire), mais utiliserez une bibliothèque pour les imprimer, telle que ncurses ou GNU readline mentionnée ci-dessus. Cela permet une compatibilité avec différents types de terminaux.