Hallo! Kann man in C (unter Linux) etwas, was man an stdout geschrieben hat, ueberschreiben? Ich muesste etwas schreiben, das wie "top" den Output aktualisiert. Sowas aehnliches gibt es ja auch bei der Fortschrittsanzeige von "scp". Leider habe ich bisher noch gar keine Tipps dazu gefunden. Vielen Dank und viele Gruesse Henning
* Henning Weier
Kann man in C (unter Linux) etwas, was man an stdout geschrieben hat, ueberschreiben? Ich muesste etwas schreiben, das wie "top" den Output aktualisiert. Sowas aehnliches gibt es ja auch bei der Fortschrittsanzeige von "scp". Leider habe ich bisher noch gar keine Tipps dazu gefunden.
Du musst Kontrollzeichen verwenden. Damit kann man z. B. Bildschirm löschen, Zeichen löschen usw. Such mal im Internet dazu, du findest bestimmt was. Für "größere" Sachen nimmt man aber ncurses. Außerdem muss man beachten, dass nicht alle Terminals gleich sind und auch eine Ausgabeumlenkung erkennen und berücksichtigen. Gruß, Bernhard -- Es ist ein großer Vorteil im Leben, die Fehler, aus denen man lernen kann, möglichst früh zu begehen. -- Sir Winston Churchil
Hallo Bernhard, Am Don, 2004-10-07 um 22.57 schrieb Bernhard Walle:
Für "größere" Sachen nimmt man aber ncurses. Außerdem muss man beachten, dass nicht alle Terminals gleich sind und auch eine Ausgabeumlenkung erkennen und berücksichtigen.
Danke für den Tipp. Ich glaube, (n)curses ist doch das, was ich will. Mit Ausgabeumlenkungen habe ich momentan kein Problem, trotzdem danke für den Hinweis. Viele Grüße Henning
Hallo, Am Thu, 07 Oct 2004, Henning Weier schrieb:
Kann man in C (unter Linux) etwas, was man an stdout geschrieben hat, ueberschreiben?
Ja. man console_codes, man isatty. Quick & Dirty und nicht portabel geht das sogar in der shell: $ for i in `seq 1 100`; do printf "[2K[1Gbar: %03i%%" $i; sleep 0.05; done; printf "\n" Die ^[ sind Escapezeichen, in C einzugeben z.B. mit '\x1B': int i; for( i = 0; i < = 100; ++i) { printf("\x1B[2K\x1B[1Gbar: %03i%%", i); usleep(50000); } printf("\n"); In 'man console_codes' finden sich die diversen Escape-Sequenzen, und teilweise auch, auf welchen Terminals diese jeweils funktionieren. Und wie angedeutet: man sollte unbedingt pruefen, ob man denn auch wirklich auf ein Terminal schreibt und nicht etwa eine Pipe oder Datei zumuellt! Um portabel zu sein muss man aber termcap / terminfo oder aehnliches verwenden, also z.B. (n)curses verwenden. HTH, -dnh -- Die drei Todfeinde des Programmieres: Sonnenlicht, frische Luft und das unerträgliche Gebrüll der Vögel.
Hallo, Am Fre, 2004-10-08 um 13.16 schrieb David Haller:
Am Thu, 07 Oct 2004, Henning Weier schrieb:
Kann man in C (unter Linux) etwas, was man an stdout geschrieben hat, ueberschreiben?
Und wie angedeutet: man sollte unbedingt pruefen, ob man denn auch wirklich auf ein Terminal schreibt und nicht etwa eine Pipe oder Datei zumuellt!
Ist momentan bei mir nicht wichtig, werde ich aber dran denken. Danke für den Hinweis.
Um portabel zu sein muss man aber termcap / terminfo oder aehnliches verwenden, also z.B. (n)curses verwenden.
Ich glaube, das werde ich dann doch machen. (n)curses ist ja auch nicht so aufwendig wie ich gedacht hätte. Vielen Dank und viele Grüße Henning
Was genau willst du überschreiben, eine Zeile, zwei Zeilen oder viele Zeilen? On Thursday 07 October 2004 21:41, Henning Weier wrote:
Hallo!
Kann man in C (unter Linux) etwas, was man an stdout geschrieben hat, ueberschreiben? Ich muesste etwas schreiben, das wie "top" den Output aktualisiert. Sowas aehnliches gibt es ja auch bei der Fortschrittsanzeige von "scp". Leider habe ich bisher noch gar keine Tipps dazu gefunden.
Vielen Dank und viele Gruesse Henning
Hallo! Am Fre, 2004-10-08 um 13.52 schrieb Thomas Bohnert:
Was genau willst du ÃŒberschreiben, eine Zeile, zwei Zeilen oder viele Zeilen?
viele Zeilen. Ich werde wohl (n)curses nehmen. Vielen Dank und viele Grüße Henning
On Thursday 07 October 2004 21:41, Henning Weier wrote:
Hallo!
Kann man in C (unter Linux) etwas, was man an stdout geschrieben hat, ueberschreiben? Ich muesste etwas schreiben, das wie "top" den Output aktualisiert. Sowas aehnliches gibt es ja auch bei der Fortschrittsanzeige von "scp". Leider habe ich bisher noch gar keine Tipps dazu gefunden.
Vielen Dank und viele Gruesse Henning
participants (4)
-
Bernhard Walle
-
David Haller
-
Henning Weier
-
Thomas Bohnert