• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

C-Funktion, ähnlich wie clear

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
 

nbkr

Guru
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.
 

whois

Ultimate Guru
Hi

das dürfte mit C wirklich nicht gehen ich habe gerade mir die Befehlsstrukturen noch mal angesehen.
 
OP
I

I2ed TigeI2

Newbie
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
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ß
 

regexer

Advanced Hacker
whois schrieb:
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:
#include <stdio.h>
int main (void)
{
    printf("^L");
    return 0;
}
Weil der Seitenvorschub wird auf der Konsole als "clear" interpretiert...
 

regexer

Advanced Hacker
notoxp schrieb:
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:
printf("\f");
 

abgdf

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

printf ("\n");

Sorry /* Embarassed */
 

TeXpert

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

Code:
#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;
}
 

TeXpert

Guru
notoxp schrieb:
abgdf schrieb:
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.
 

regexer

Advanced Hacker
TeXpert schrieb:
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 ...
 

Keepers

Advanced Hacker
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?
 

regexer

Advanced Hacker
notoxp schrieb:
TeXpert schrieb:
notoxp, welche Shell? ich habs mit bash 3.00.16 versucht.
Habe im Moment kein Linux zur Hand. Nur Windows...
So! Jetzt aber...
Code:
~> 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?
 

TeXpert

Guru
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...
 

abgdf

Guru
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
 
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.
 
Oben