Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

C-Funktion, ähnlich wie clear

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

I2ed TigeI2
Newbie
Newbie
Beiträge: 13
Registriert: 28. Aug 2005, 15:45

C-Funktion, ähnlich wie clear

Beitrag von I2ed TigeI2 »

Hi,

Ich habe desöfteren so eine Funktion benötigt aber nie wirklich eine gefunden. Jetzt meine Frage an euch, gibt es eine Funktion die den Bildschirm säubert und man wieder oben schreiben kann? Mit Zeilenvorschub ist es hier nicht getan...
Wenn ja, in welcher header kann man sie finden, ist die header in einem Standardcompiler schon implementiert und wie verwendet man sie?

Ich hoffe ihr könnt mir weiterhelfen!

RedTiger
Benutzeravatar
nbkr
Guru
Guru
Beiträge: 2858
Registriert: 10. Jul 2004, 15:47

Beitrag von nbkr »

Meines Wissens nach geht das mit C nicht direkt. Dafür brauchst Du eine Grafikbibliothek. ncurses sollte das können. Ansonsten kannst Du aber auch einfach "clear" aus deinem C Programm aus aufrufen.
Kann gar nicht sein, ich bin gefürchtet Wald aus, Wald ein.
Benutzeravatar
whois
Administrator
Administrator
Beiträge: 16636
Registriert: 11. Okt 2004, 08:50
Wohnort: Aachen
Kontaktdaten:

Beitrag von whois »

Hi

das dürfte mit C wirklich nicht gehen ich habe gerade mir die Befehlsstrukturen noch mal angesehen.
}-Tux-{
Hacker
Hacker
Beiträge: 698
Registriert: 12. Dez 2004, 19:54
Kontaktdaten:

Re: C-Funktion, ähnlich wie clear

Beitrag von }-Tux-{ »

wie meinst du das?
einfach nur die konsole "säubern"?
I2ed TigeI2
Newbie
Newbie
Beiträge: 13
Registriert: 28. Aug 2005, 15:45

Beitrag von I2ed TigeI2 »

Danke für den Hinweis Leute! Das heißt ich muss das selbst inrgendwie hinkriegen. In Linux funktioniert das mit clear, aber in Windows sieht das anders aus...

}-Tux-{: Ja, ich meine eine Funktion die einfach die konsole säubert, und den Cursor wieder ganz oben in die linke ecke bringt.

RedTiger
abgdf
Guru
Guru
Beiträge: 3381
Registriert: 13. Apr 2004, 21:15

Beitrag von abgdf »

Hallo,

das scheint blöderweise wirklich schwer zu sein.
Hab mal in den Sourcen von z.B. frotz (einem Textadventure-Interpreter) geguckt, wie das dort gemacht wird. Das sind dort eigene Funktionen, die ich nicht verstehe.
Darum ist C/C++ wohl so schwer.
ncurses soll die Funktionen haben (man ncurses). Ich weiß aber nicht, wie ich die richtig aufrufe.

In Perl geht

#!/usr/bin/perl
system(clear);

Also, ich versuch's daher erstmal mit Perl. Kann man mit perlcc ja auch kompilieren.

Gruß
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

whois hat geschrieben:das dürfte mit C wirklich nicht gehen ich habe gerade mir die Befehlsstrukturen noch mal angesehen.
Bin jetzt kein C-Hacker. Aber so funktioniert es bei mir:

Code: Alles auswählen

#include <stdio.h>
int main (void)
{
    printf("^L");
    return 0;
}
Weil der Seitenvorschub wird auf der Konsole als "clear" interpretiert...
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

notoxp hat geschrieben: printf("^L");
Ach ja, und bevor Fragen kommen: Ich habe das "^L" im vi durch "STRG+L" eingefügt. Aber einfacher (und sauberer) ist es natürlich, wenn man Formfeed mit "\f" maskiert. Die reine Wahrheit sähe also so aus:

Code: Alles auswählen

printf("\f");
abgdf
Guru
Guru
Beiträge: 3381
Registriert: 13. Apr 2004, 21:15

Beitrag von abgdf »

Also, ich krieg da mit gcc und g++ (SuSE 8.1) nur eine Leerzeile wie bei

printf ("\n");

Sorry /* Embarassed */
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

dann werfe ich doch noch mal eine Alternative mit den vt200-Escape-Codes ins Rennen ;)

Code: Alles auswählen

#include <stdio.h>

#define ESC "\033"
#define CLRSCR ESC "[2J"
#define HOME ESC "[1;1H"
#define CLRHOME CLRSCR HOME

int main (void)
{
   printf(CLRHOME);
   return 0;
}

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

abgdf hat geschrieben:Also, ich krieg da mit gcc und g++ (SuSE 8.1) nur eine Leerzeile wie bei

printf ("\n");

Sorry /* Embarassed */
Bei mir funktioniert es, SLES 8
I2ed TigeI2
Newbie
Newbie
Beiträge: 13
Registriert: 28. Aug 2005, 15:45

Beitrag von I2ed TigeI2 »

Funktioniert bei mir auch nicht... Bewirkt nur Zeilenvorschub (mit cc)
abgdf
Guru
Guru
Beiträge: 3381
Registriert: 13. Apr 2004, 21:15

Beitrag von abgdf »

Mit dem neuen Code geht's jetzt.

Tausend Dank ! /* Glücklich */
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

notoxp hat geschrieben:
abgdf hat geschrieben:Also, ich krieg da mit gcc und g++ (SuSE 8.1) nur eine Leerzeile wie bei

printf ("\n");

Sorry /* Embarassed */
Bei mir funktioniert es, SLES 8
ich habs jetzt spasseshalber auch ausprobiert und auch hier mit gcc 3.3.5 geht der Formfeed mit Control-Codes sowohl mit locale UTF-8 als auch mit Latin-1 nicht... hmm das müsste man sich noch ma näher ansehen,

notoxp, welche Shell? ich habs mit bash 3.00.16 versucht.

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

TeXpert hat geschrieben:notoxp, welche Shell? ich habs mit bash 3.00.16 versucht.
Habe im Moment kein Linux zur Hand. Nur Windows...

Ich hatte die Idee mit dem FF, weil ich im alten DEC-Unix immer den screen geputzt bekam, wenn ich in einer Printfile über ein FF scrollte.

Aber könnte es sein, dass das an meinen PuTTY-Einstellungen liegt? Ich sitzte nämlich nicht direkt am Rechner ...
Zuletzt geändert von regexer am 14. Sep 2005, 20:55, insgesamt 1-mal geändert.
Keepers
Advanced Hacker
Advanced Hacker
Beiträge: 1061
Registriert: 25. Jun 2004, 17:58
Wohnort: Hessen

Beitrag von Keepers »

Mag sein dass dass jetzt bissl off topic ist aber warum gebt ihr die 0 noch zurueck wenn ihr schon int main(void) habt.

Afaik erwartet er dann doch in dem Sinne gar nix mehr...
Oder macht doch gleich void main..

Kann mir aber vorstellen dass im ANSI mittlerweile nur von int main geredet wird?
Gruß Keepers
Only time will tell - but who does listen?
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

notoxp hat geschrieben:
TeXpert hat geschrieben:notoxp, welche Shell? ich habs mit bash 3.00.16 versucht.
Habe im Moment kein Linux zur Hand. Nur Windows...
So! Jetzt aber...

Code: Alles auswählen

~> bash --version
GNU bash, version 2.05b.0(1)-release (i586-suse-linux)
Copyright (C) 2002 Free Software Foundation, Inc.
~> perl -e 'print "\f"'
~> echo -ne '\f'
~> echo 'int main (void) {printf("\f");}' > test.c
~> gcc test.c -o clstest
~> clstest
Alle drei (perl, echo, clstest) putzen bei mir den Bildschirm. Allerdings verwende ich wie schon erwähnt PuTTY. Der telnet von Windows macht das nicht (gerade eben erst getestet).

Übrigens: Hat mal schon jemand einen Blick in die Source von "clear" geworfen?
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

also hier mit bash3 und UTF-8 locale funktioniert der Trick mit dem Formfeed nicht... und clear ist bei mir Teil der ncurses-Binaries... oh Graus, da braucht man etwas länger für...

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
abgdf
Guru
Guru
Beiträge: 3381
Registriert: 13. Apr 2004, 21:15

Beitrag von abgdf »

Hurra,

ich hab's gefunden (Tag 12 des Programmierkurses aus den Threads von Mumie hier im Forum):
Auch die C-Standardbibliothek enthält wie Perl die system-Funktion. Also:

#include <stdlib.h>

main ()
{
system("clear");
}

Das war's schon.
Beste Grüße
Cauchykriterium
Member
Member
Beiträge: 50
Registriert: 13. Sep 2005, 23:00
Kontaktdaten:

Beitrag von Cauchykriterium »

Und wenn Du jetzt ein Schäfchen in meinem Tutorium wärest, hätte ich Dir jetzt einen Punkt wegen dem system() abgezogen. In meinen Augen ist es schlechter Stil, da auch andere, bessere Hilfsmittel dafür zur Verfügungen stehen: die Escape-Sequenzen. Die Verwendung von system() ist hier zwar kein Problem, aber generell fängt man sich damit noch leichter eine Sicherheitslücke ein, wenn da u.u. auch noch eine Benutzereingabe als Parameter ungeprüft eingefügt wird: Stichworte IFS, Links etc.
Antworten