[C/C++] Programmabbruch mit STRG+C verhindern

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Leon, 2. November 2008 .

Schlagworte:
  1. 2. November 2008
    Programmabbruch mit STRG+C verhindern

    Hallo,

    versuche unter Linux ein Programmabbruch eines Konsolenprogramms in C mit STRG+C zu verhindern.
    Habe mir dazu schon die Dokumentation zu signal angeschaut, bin aber noch nicht wirklich schlau drauß geworden.
    Habt ihr einen hilfreichen Tipp oder einen Codeschnipsel wie ich das abfangen kann?

    mfg
    Leon
     
  2. 2. November 2008
    AW: Programmabbruch mit STRG+C verhindern

    Code:
     1.
     case [B]WM_STRG[/B]:
     
     {
     
     case VK_CONVERT:
     
     {
     
     if ( GetKeyState(VK_C) )
     
     PostQuitMessage (0);
     
     }
    
     
    
     return 0;
     
     }
    damit kannste selber bestimmen was beim bestimmten punkt passiert... habs in c aber noch nicht direkt ausprobiert und bei den fettgedruckten variablen bin ich mir nicht ganz sicher. Aber irgendwie so sollts gehen
     
  3. 2. November 2008
    AW: Programmabbruch mit STRG+C verhindern

    Fällt dir was auf?

    Zum Thema:
    Fange einfach das Signal auf und beende das Programm nicht .
     
  4. 2. November 2008
    AW: Programmabbruch mit STRG+C verhindern

    Also ich hab mal schnell gegoogelt und was gefunden (ein wenig angepasst):
    Code:
    #include <stdio.h>
    #include <stdlib.h> // Nur damit wir system("PAUSE") aufrufen koennen.
    #include <signal.h> // Wichtig für das Abfangen des Signals!
    
    void ex_program(int sig) 
    {
     printf("Wake up call ... !!! - Catched signal: %d ... !!\n", sig);
     b = false;
     (void) signal(SIGINT, SIG_DFL);
    }
    
    bool b = true;
    
    int main(void) 
    {
     (void) signal(SIGINT, ex_program);
     while(b)
     printf("sleeping .. ZZZzzzz ....\n");
     system("PAUSE");
     return 0;
    }
    Demnach musst du ne Funktion definieren, die aufgerufen werden soll, wenn CTRL+C gedrückt wurde und dann in der main() die Funktion über signal(SIGINT, <funktion>) einbinden.
    Hab das Beispiel mal angepasst, die Schleife wird solange durchlaufen, bis CTRL+C gedrückt wird, die entsprechende Funktion aufgerufen wird und dabei b=false gesetzt wird.

    Ach ja und nochwas: Willst du, dass CTRG+C mehrmals abgefangen wird, änderst du die Funktion etwas ab:
    Code:
    void ex_program(int sig) 
    {
     printf("Wake up call ... !!! - Catched signal: %d ... !!\n", sig);
     b = false;
     (void) signal(SIGINT, ex_program); // <--- Aenderung :)
    }
    Nun kann man das Programm gar nicht mehr auf diese Weise abschiessen.

    Ich seh grad, dass Linux kein "pause" hat. Aber das hindert das Programm nicht am Ausführen, es pausiert halt einfach nicht(wer schnell genug lesen kann sieht "pause: command not found"^^).
     
  5. 4. November 2008
    AW: Programmabbruch mit STRG+C verhindern

    wie schon gesagt... das wäre windowsprogrammierung... sprich nix linux...

    pause braucht ihr nicht, wenn ihr das ganze direkt übers Terminal aufruft, oder ihr benutzt getch()
     
  6. 4. November 2008
    AW: Programmabbruch mit STRG+C verhindern

    Is auch klar, war ja nur für das Beispiel.
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.