PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ein paar Fragen zu C++



RlDdLeR
04-07-2004, 15:11
Hallo!
Ich bin nicht so konform mit C++, deshalb habe ich ein paar Fragen an euch.
Zuerst einmal, wie kann ich in ein PRogramm einbauen, dass Tastenkombinationen registriert werden, z.b. wenn man während das Programm läuft Strg+C drückt, sich das Programm beendet?!

Dann würde ich gern noch wissen, wie ich mit meinem Programm befehle in der bash ausführen lassen kann, z.b. um ein archiv zu entpacken oder so?!

Das wär erstmal alles, dake für eure Hilfe.
riddler

peschmae
04-07-2004, 15:57
Das zweite geht z.B: mit system()
http://www.cppreference.com/stdother_details.html#system

Das erste hab ich nicht ganz verstanden. Was für ein Toolkit verwendest du? Oder ist das eine Konsolenapp?

MfG Peschmä

axeljaeger
04-07-2004, 16:12
Speziell Ctrl+C sendet in gängigen Shells ein Signal an dein Programm. Welches weis ich jetzt nicht. Aber bei Signalen musst du dann schon mit dem Abfangen anfangen.

locus vivendi
04-07-2004, 17:53
Was die anderen Poster geschrieben haben ist richtig. Aber vielleicht noch mal auf den Punkt gebracht. Das was du willst (Keypress erkennen meine ich) ist plattformabhängig und nicht durch den C++ Standard definiert. Wenn du ein System hast was POSIX kompatibel ist, könntest du dir mal tcgetattr und tcsetattr angucken. Damit ist das zu bewerkstelligen. Eine andere Möglichkeit ist z.B. die ncurses Bibliothek zu benutzen. Generell würde ich aber schauen ob das überhaupt den Aufwand wert ist.

Ansonsten noch als Ergänzung zu "system", da solltest du dir Gedanken machen das sich der Einsatz nicht zum Sicherheitsrisiko entwickelt. Nur als Beispiel: Ein Benutzer soll den Archivnamen eingeben, und du konstruierst daraus z.B. den Aufruf system("tar -xpzf ARCHIVNAME"). Stell dir vor ein böswilliger Benutzer gibt als Archivname dieses hier an "datei.tar.gz && rm -rf /*". Dann rufst du auf system("tar -xpzf datei.tar.gz && rm -rf /*") und schwupps verschwinden eine Menge Dateien.

panzi
04-07-2004, 18:09
Speziell Ctrl+C sendet in gängigen Shells ein Signal an dein Programm. Welches weis ich jetzt nicht. Aber bei Signalen musst du dann schon mit dem Abfangen anfangen.

Ctrl+C sendet SIGINT.
Manche Signale (wie z.B. SIGINT) kann man "abfangen" und gesondert darauf reagiren, aber im Normalfall wird bei SIGINT das Programm abgebrochen.
siehe: http://www.die.net/doc/linux/man/man2/signal.2.html

RlDdLeR
04-07-2004, 22:17
Ah danke für die netten Ratschläge, funktioniert alles soweit sehr gut, danke nochmal. Sehr nettes Forum, sehr sachverständig ;)