Comment faire pour actualiser l'écran, de manière continue et mise à jour en temps réel
Je veux écrire un programme en C sous linux qui rafraîchit l'écran en permanence et mises à jour en temps réel (par exemple, à l'instar de la top
de commande dans le terminal). Quelqu'un peut me pointer dans la bonne direction.
- en.wikipedia.org/wiki/Ncurses
- Jetez un oeil à NCURSES
- Jetez un oeil à ncurses
- Encore en développement, mais il peut aussi prendre un coup d'oeil à Termbox code.google.com/p/termbox
Vous devez vous connecter pour publier un commentaire.
Garder portable sur l'ensemble des types de terminaux, vous devez utiliser une bibliothèque comme ncurses. Regardez ce lien, ses exhaustive tutoriel.
Ici est un programme de base qui permet d'imprimer un nombre toujours croissant dans le coin supérieur gauche de l'écran:
C'est comment vous actualisez la fenêtre. Maintenant, si vous voulez afficher les lignes de données
top
n', les données d'affichage doit être maintenu dans un ensemble ordonné de la structure des données (en fonction de vos données, il peut-être quelque chose d'aussi simple qu'un tableau ou une liste chaînée). Vous devez trier les données en fonction de ce que votre logique dicte et ré-écrire à la fenêtre (comme illustré dans l'exemple ci-dessus) après unclear()
ouwclear()
.Ncurses peut être le chemin à parcourir. Puisque vous avez dit programme, alors ncurses, c, c++. Rechercher dans tout cela. Mais si vous avez l'intention de faire quelque chose de juste "shelL" connexes, rendez-vous avec perl.
Edit: Pour ajouter sur mon point de vue, voici quelques modules qui peuvent vous donner une idée.
http://metacpan.org/pod/Curses::UI::Dialog::Progress
http://metacpan.org/pod/Smart::Comments
Et pour faire bonne mesure, un appel pour les malédictions pour effacer la totalité de la fenêtre.
Si vous avez moins de
xterm
ouVT100
compatible, vous pouvez faire usage de console codes, exemple:Vous pouvez faire presque tout avec des séquences d'échappement, mais comme l'a souligné dans wikipedia:
ncurses
optimise les modifications de l'écran, afin de réduire le temps de latence connu lors de l'utilisation à distance des coquilles.fputs(..., stdout)
au lieu deprintf(...)
.#define
... Dansmain
,puts
serait suffisant.gotoxy()
(et beaucoup d'autres séquences) reçoit des paramètres,fputs()
n'est pas un bon choix 😉clear
! De petites choses, pas important, désolé! 😉\033[H
code est correct et approprié ici. Mais la définition qu'il soit égal àclear()
peuvent être trompeuses. Car il n'est pas évident de l'écran (comme le code\033[2J
n'. Il met simplement à jour il. Doncupdate()
serait mieux adaptée.Selon votre situation, vous pouvez utiliser le bouton "regarder" de la commande sur la ligne de commande permettant d'obtenir rapidement des points de vue comme top. Vous pouvez également regarder plusieurs commandes en même temps.
ex:
Comme les autres l'ont dit, vous devriez regarder la bibliothèque ncurses. Mais si vous n'avez pas besoin de mise en forme avancée, peut-être quelque chose de simple comme cela peut être suffisant:
Ainsi que l'utilisation de la bibliothèque ncurses pour faire l'écran de la manipulation, si vous voulez le mettre à jour "en continu" et "en temps réel", vous allez probablement vouloir regarder dans les minuteries et de traitement du signal, trop.
timer_create()
ettimer_settime()
, vous pouvez obtenir un timer, et vous pouvez utilisersigaction()
pour définir une fonction de gestionnaire pour piéger leSIGALRM
signal et de faire votre mise à jour.EDIT: Voici un exemple de code, comme l'a demandé: