Bildschirm löschen

Post Reply
Message
Author
muello
Posts: 28
Joined: 11. Feb 2001 21:12

Bildschirm löschen

#1 Post by muello »

Hallo Linuxianer,

ich bin ein Newbie in Sachen C++. In einem Grundlagenkurs haben wir mit
Borland C++Builder programmiert. Da ich eine Linuxkiste und keine
500 Euro für Borland übrig habe, wollte ich den GNU <c++>Compiler nutzen. Die ersten versuche verliefen zufriedenstellend.
Mittlerweile misse ich ein paar Headerfiles, wie z.B. die conio.h. Und hier liegt auch mein Prob.

Wie kann ich mit dem <c++> den aktuellen Bildschirm löschen? Bisher bin ich nur auf das Entwicklerpaket <ncurses> gestossen.

Ich würde mich über ein paar Antworten von Euch freuen. Vielleicht hat der Eine oder Andere noch etwas Hintergrundwissen mit dem Umgang des <c++> oder kann mir evt. einen anderen Compiler empfehlen.

Cu @mastertm

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Bildschirm löschen

#2 Post by bakunin »

Hi mastertm!

Die conio.h ist eine Erfindung, die in keinem Standard vorkommt und es nur unter DOS/Windows gibt. Unter Unix- und GNU-Systemen verwendet man tatsächlich die curses-Bibliothek bzw. im Linux-basierten GNU-System die NCurses-Implementierung davon.

Alternativ kannst du z.B. - was manch einer vielleicht nicht elegant finden wird, was aber durchaus eine recht zuverlässige und portable Lösung ist - system("clear") aufrufen. Die Funktion system() ist in stdlib.h deklariert. Eine weitere Möglichkeit wäre, direkt die entsprechende Terminal-Kontrollsequenz auszugeben, aber das ist noch so halbwegs portabel (auf manchen exotischen Terminal-Typen wird es nicht funktionieren) und sieht recht hässlich im Quellcode aus, nämlich so: printf("\033[H\033[J").

Was den Umgang mit dem GNU C++ Compiler angeht, sind natürlich erst einmal die Optionen relevant. Hier ein paar ausgewählte, die ich allgemein hilfreich finde:

-Wall (mehr Warnungen aktivieren)
-W (zusätzliche Warnungen aktivieren)
-Wno-unused (nicht wegen definierter, aber nicht benutzer Variablen warnen)
-c (nur Compilieren, nicht linken)
-O1 (ein wenig optimieren)
-O2 (viel optimieren)
-O3 (extrem optimieren, nicht immer sinnvoll)
-fomit-frame-pointer (eine ganz bestimmte Optimierung)
-g (Debugging-Symbole verwenden, damit man es z.B. mit gdb debuggen kann)
-lXXX (gegen Bibliothek XXX linken, z.B. -lncurses für die NCurses-Bibliothek, muss _nach_ den Dateinamen kommen, die der Compiler verarbeiten soll, also z.B. "g++ -Wall -O2 -g foo.cpp -lncurses")
-DXXX (Definiere Symbol XXX, wie mit #define XXX)

Es gibt natürlich weit mehr (siehe "info gcc" oder die veraltende Manpage "man gcc"), aber diese sollten für den Anfang reichen. "info gcc" gibt auch noch einige weiterführende Tipps, z.B. über Erweiterungen des GNU-Compilers wie geschachtelte Funktionen usw.

Außer dem GNU-Compiler gibt es nichts, was wirklich Nennenswert wäre, höchstens noch den Open C++ Compiler (http://www.csg.is.titech.ac.jp/~chiba/openc++.html), der es ermöglicht, C++ zu erweitern, was eher für Fortgeschrittene interessant ist und ich weiß auch nicht, wie brauchbar das Teil ist, d.h. ich habe ihn nur zufällig in der Debian-Paketliste gefunden. Es gibt natürlich auch kostenpflichtige proprietäre Compiler, aber die sind hier wohl nicht interessant.

Cheers,
GNU/Wolfgang

muello
Posts: 28
Joined: 11. Feb 2001 21:12

Re: Bildschirm löschen

#3 Post by muello »

Hallo Wolfgang,

vielen Dank für deine Info's. Die Funktion <system()> gefällt mir als portable Lösung am Besten.

Unter der ncurses-Implementierung gibt es auch einen clear-Befehl. Kann man mit ncurses auch irgendwie den Bildschirm löschen???

Thanks & Best Recards

mastertm <tommy müller>

Taurus

Re: Bildschirm löschen

#4 Post by Taurus »

Hi !

Ich würde sagen das für den Systemaufruf eine absolute Pfadangabe vieleicht besser wäre.
Denn was ist wenn dein Programm z.B suid gesetzt ist und ein Bösewicht ändert die PATH - Umgebungsvariable ...
Er ändert seine PATH Variable und schreibt sich ein "übles" Programm das er 'clear' nennt und schon ists vorbei mit
der Systemsicherheit ... ;)

mastertm

Re: Bildschirm löschen

#5 Post by mastertm »

Hi "",

ich freue mich über jede Anregung...

Bei Deinem Threat konnte ich leider nicht genau herausfinden, ob du die ncurses- oder die sytem-Implementierung meinst. Ausserdem konnte das Ding mit der Pfadangabe nicht vollständig verarbeiten. Bei der <include> - Anweisung gibts ja die zwei Möglichkeiten - wie funzt das beim Funktionsaufruf ???

Cu mastertm

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Bildschirm löschen

#6 Post by bakunin »

Hi!

> Ich würde sagen das für den Systemaufruf eine absolute Pfadangabe vieleicht besser wäre.

Ja, das ist besser (also system("/usr/bin/clear")), aber wer schreibt denn suid-Programme? <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Cheers,
GNU/Wolfgang

Descartes

Re: Bildschirm löschen

#7 Post by Descartes »

Guten Morgen GNU/Wolfgang -- musst du nachher nicht aufstehen oder hast du noch Ferien ??

Gibts eigentlich sowas wie Lint auch für C++ Quellcode ?
Ich habe letztens so beim Surfen LCLint ( <a href="http://lclint.cs.virginia.edu/" target="_blank"><!--auto-->http://lclint.cs.virginia.edu/</a><!--auto--> )
entdeckt und dachte halt ...

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Bildschirm löschen

#8 Post by bakunin »

Hi Descartes!

> Guten Morgen GNU/Wolfgang -- musst du nachher nicht aufstehen oder hast du noch Ferien ??

Wenn man nicht schlafengeht, muss man nicht aufstehen. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle"> Ne, mal ernsthaft: Ich habe noch eine Woche, aber sollte mich langsam mal umgewöhnen. Aber ich will vor dem Schlafengehen noch herausfinden, warum Ruby unter GNU/Hurd falsche Errno-Konstanten liefert. Und dann vielleicht noch, warum das interaktive Ruby (irb) mein $HOME wie eine Datei einlesen will (was unter GNU/Hurd ja funktioniert, nur ist's kein gültiger Ruby-Quellcode)...

> Gibts eigentlich sowas wie Lint auch für C++ Quellcode ?

Ist mir nichts bekannt. Warum sollte jemand sowas auch schreiben? Genau dann, wenn man damit fertig wäre würde es sowiso wieder 'nen neuen C++ Standard geben, der inkompatibel zu allen vorherigen ist.

Cheers,
GNU/Wolfgang

mastertm

Re: Bildschirm löschen

#9 Post by mastertm »

Hi-Ho,

ich muss als Newbie nochmal kurz einhaken...

Wann ist denn Suid-Programm ???

Und das Problem mit der Sicherheit ist mir immer noch nicht so klar. Wenn der Source-Code compiliert ist, kann man doch keine weiteren Änderungen am compilierten Programm machen? Wo ist da denn das Problem mit der Sicherheit?

Vielen DAnk für Eure Ausdauer <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Cu mastertm

Post Reply