Abbruch durch Ctrl-C verhindern
-
Hallo,
wie kann ich es verhindern, daß der User in meinem C-DOS-Programm mit Control-C das Programm beendet. Es wird dann immer eingeblendet ^C und dann bricht das Programm sofort ab. Wie kann ich das verhindern ?
-
#include <signal.h> //... signal(SIGTERM,SIG_IGN);
bzw. die C++ Version
#include <csignal> //... std::signal(SIGTERM,SIG_IGN);
[ Dieser Beitrag wurde am 01.08.2002 um 11:17 Uhr von kingruedi editiert. ]
-
Kannst du das noch ein bißchen kommentieren ?
Was macht diese Funktion genau ? Gibt es die auch in Borland-C ?
-
schau doch einfach in deinem C(++) Buch nach
signal ist ISO C(++), deswegen sollte auch der Borland die Funktionen unterstützen.
signal setzt einen Signal-Handler für ein bestimmtest Signal. In dem Fall das Signal was idr. von cC ausgelöst wird. SIG_IGN gibt an, dass das Signal ignoriert werden soll. Da könntest du natürlich auch einen normalen Signal-Handler einsetzen
-
Kann ich dann einfach
signal(SIGTERM,SIG_IGN);
aufrufen ? Oder muss ich das irgendwie abändern ?
-
Das würde ich erstmals direkt übernehmen, wenn du später tiefer in Richtung low-level gehen willst, hilft dir die WinAPI mit ihrer Handler-Routine, aber das macht die Sache nur unnötig kompliziert.
MfG SideWinder
-
Ich hab es jetzt hinbekommen, dass das Programm nicht mehr abbricht bei Control C(signal(SIGINT,SIG_IGN);), allerdings wird das ^C immernoch angezeigt. Wie bekommt man das weg ?
-
BTW: Verhindert SIGTERM eigentlich nur CTRL+C oder auch sämtliche anderen Terminierungshotkeys die vom System per ENABLE_PROCESSED_INPUT gesteuert werden?
Verhindert es also auch ALT+F4, etc.?
MfG SideWinder
-
@SideWinder: DOS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
Mit SIGTERM lässt sich das Programm noch durch control-C beenden. Erst durch SIGINT läuft das Programm auch bei Control-C weiter, gibt allerdings noch ^C auf dem bildschirm aus. Hat jemand ne Idee, wie man das noch wegbekommt ?
-
BTW: Verhindert SIGTERM eigentlich nur CTRL+C oder auch sämtliche anderen Terminierungshotkeys die vom System per ENABLE_PROCESSED_INPUT gesteuert werden?
SIGTERM steht für alle Terminierungs Signale die an den Prozess geschickt werden. Also cF4 auch, wenn es ein SIGTERM Signal an den Prozess schickt
@Steffen
Naja cC löst unter DOS wohl ein SIGINT Signal aus, dass wusste ich nicht, da cC unter Unix ein SIGTERM auslöst und ich dachte, dass wär gleich.Das ^C kannst du versuchen zu überschreiben
[ Dieser Beitrag wurde am 01.08.2002 um 12:50 Uhr von kingruedi editiert. ]
-
@SideWinder: DOS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Hätt auch eins gereicht - woher soll ich wissen, dass du unter DOS proggst?
MfG SideWinder
-
@sidewinder: weil ich es am anfang geschrieben hatte ! Aber kein Problem !
-
Tut mir leid, hatte ich übersehen .
MfG SideWinder
-
@SideWinder: Schon ok.
Kennt jemand eine Möglichkeit, dass das ^C nicht ausgegeben wird, wenn man Control-C drückt ?
-
Gibt es auch eine möglichkeit das Programm z.B. durch Druck auf die Escape Taste zu Beenden anstatt durch control-C?
-
das ist nur über umwege möglich.
Man könnte einerseits ein Thread/Prozess starten, der auf den Druck von Escape wartet und dann ein Signal an das Programm schickt (aber unter DOS ist das ein Problem und allerhöchstens mit einer TSR möglich) oder man könnte das OS so einstellen, dass es Escape als ein Signal behandelt (aber ka. wie das geht)