signal ctrl-D ctrl-C
-
Hallo
Ich versuch gerade meine Programme ordentlich zu beenden ( recourcen freigeben usw. )ich hab dazu eine usereingabe die befehle entgegen nimmt:
// get input char chr; string input; chr = (char) cin.get(); while (chr != '\n') { input = input + chr; chr = (char) cin.get(); }
ctrl-C ist ein signal um sofort abzubrechen ( glaub ich ).
ctrl-D ist denke ich um das Programm ordnungsgemäß zu beenden ( oder? ).wenn ich allerdings bei meiner user eingabe ctrl-D drücke, dann fangt er an zu spinnen.
wie wird das in c++ gemacht?
mit signal handlern?
wenn ich jetzt einen signal handler schreibe muss ich dann alle signale behandeln oder gibts hier eine forward methode um nur bestimmte zu bearbeiten.
welches signal ist str-c (sigterm?) und str-d?fragen über fragen und ich kenn mich nicht aus ...
lg
Arnulf
-
ich würde es mal mit GetMessange() und SendMessage versuchen
http://msdn2.microsoft.com/en-us/library/ms644936.aspx
http://msdn2.microsoft.com/en-us/library/ms644950.aspxmit freundlichen Grüßen
-
naja wenn ich unter windows programmieren würde vielleicht
arbeite aber unter ubuntu linux mit g++
lg
Arnulf
-
Dass Dein Programm im derzeitigen Zustand durchdreht wenn Du STRG-D drückst ist verständlich, denn danach ist stdin EOF, d.h. cin.get() wartet nicht auf eine Eingabe, und chr wird niemals '\n'. Du landest in einer Endlosschleife.
Daraus folgt auch sogleich, dass Du STRG-D abfangen kannst indem Du cin.eof() prüfst. STRG-D ist hier kein Signal an das Programm, sondern das Zeichen für das Terminal, dass es der Standardeingabe EOF signalisieren soll.
Zum Abfangen von STRG-C musst Du SIGINT abfangen. Dazu schau Dir am besten mal signal oder (besser) sigaction
@Mods:
Das [url ] Statement kann keine Klammern in der URL
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
LordJaxom: Ist bekannt, gab dazu mal einen Thread in der Forentechnik.