Sous Linux, stdout
en ligne de commande, je veux mettre à jour une zone spécifique, telle que la sortie apt-get
:
54% [Waiting for headers] [Waiting for headers] 211 kB/s 3s
le pourcentage , kB / s et seconde sera mis à jour chaque seconde.
Si nous utilisons printf
nous obtiendrons plusieurs lignes en sortie. J’ai essayé de suivre printf
:
printf("\e[1;1H\e[2J");
Mais il nettoie toute la sortie.
Ma question est de savoir comment mettre à jour un domaine spécifique et garder les autres stables?
Utilisez le retour chariot. Cela ramènera le curseur au début de la ligne, à partir duquel vous pourrez écraser ce qui était dans la ligne auparavant. Par exemple:
printf("Hello, world!\rX");
Sera visible comme:
Xello, world!
Assurez-vous de vider souvent la stdout
si vous souhaitez qu’elle soit visible:
fflush(stdout);
De plus, si vous voulez une sortie de console en plein écran, envisagez d’utiliser ncurses . Si vous voulez une ligne d’entrée modifiable, la bibliothèque readline GNU est également utile!