c; endlosschleife abbrechen

Diskutiere c; endlosschleife abbrechen im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hallo Forum, wisst ihr eine Möglichkeit um aus diesen Endlosschleifen bei einem "strg +c" raus zuspringen? //foo programm #include...

  1. keks

    keks nicht 1337 genug

    Dabei seit:
    17.01.2007
    Beiträge:
    401
    Zustimmungen:
    0
    Ort:
    Hessen
    Hallo Forum,

    wisst ihr eine Möglichkeit um aus diesen Endlosschleifen bei einem "strg +c" raus zuspringen?
    Code:
    //foo programm
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    
    void help(void)
    {
    	printf("USAGE: foo -c programm \n"); //-c == clear
    }
    
    int SYS(char *blub)
    {
    	system(blub);
    }
    
    //main beginn ------------------------
    int main(int argc,char **argv)
    {
    	int ruckgabe;
    	char penn[] = "sleep \0";
    	if(1==argc)
    	{
    		help();
    	}
    	
    
    	else if(strcmp(argv[1], "-c")==0) //strcmp vergleicht strings
    	{
    		strcat(penn, argv[2]);
    		while(0==0) //dieser zum bleistift
    		{
    			system("clear");
    			system(argv[3]);
    			system(penn);
    		}
    	}
    	
    	else if(strcmp(argv[1], "-c")!=0)
    	{
    		strcat(penn, argv[1]);
    		while(0==0)
    		{
    			system(argv[2]);
    			//system(argv[1]);
    			system(penn);
    		}
    	}
    
    return 0;
    }
    
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. grey

    grey -=[GHOST]=-

    Dabei seit:
    28.07.2006
    Beiträge:
    303
    Zustimmungen:
    0
    Ich würde einfach die Tastenanschläge in der Schleife abfangen und auswerten ...
     
  4. #3 keks, 06.06.2007
    Zuletzt bearbeitet: 06.06.2007
    keks

    keks nicht 1337 genug

    Dabei seit:
    17.01.2007
    Beiträge:
    401
    Zustimmungen:
    0
    Ort:
    Hessen
    Daran habe ich auch gedacht, mit welcher Funktion würdest du das machen?
    [edit]
    ich möchte nicht das mein Programm erst auf die eingabe wartet.
    Sondern weiterläuft.
     
  5. #4 bitmuncher, 06.06.2007
    bitmuncher

    bitmuncher Foren Gott

    Dabei seit:
    08.05.2007
    Beiträge:
    3.180
    Zustimmungen:
    3
    Deine Lösung dürfte ein eigener Signalhandler für SIGTERM sein. Dieses Signal wird nämlich ausgelöst, wenn jemand Strg+C drückt.
     
  6. #5 Mµ*e^13.5_?¿, 06.06.2007
    Zuletzt bearbeitet: 06.06.2007
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    Also ich schätze mal, so in diesem Programm wird das nichts werden, da ja praktisch immer jedes strg+c von sleep verwurstet wird.
    Daher ist es praktischer, das einfach mit sleep() zu ersetzen.
    Dann brauchen wir nur noch SIGINT dazu umbiegen, dass es nur eine schleife beendet und fertig ist die ganze Sache.
    Code:
    //foo programm
    #include <signal.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    #include <unistd.h>
    
    int cont;
    
    void sigint (int sig)
    {
    	cont = 0;
    #ifdef DONT_REMEMBER_SIGNAL
    	signal(SIGINT, sigint);
    #endif
    }
    
    void help(void)
    {
    	printf("USAGE: foo -c programm \n"); //-c == clear
    }
    
    int SYS(char *blub)
    {
    	system(blub);
    }
    
    //main beginn ------------------------
    int main(int argc,char **argv)
    {
    	int ruckgabe;
    	char penn[] = "sleep \0";
    
    	signal(SIGINT, sigint);
    	cont = 1;
    	
    	if(1==argc)
    	{
    		help();
    	}
    
    	else if(strcmp(argv[1], "-c")==0) //strcmp vergleicht strings
    	{
    		// strcat(penn, argv[2]);
    		while(0==0) //dieser zum bleistift
    		{
    			system("clear");
    			system(argv[3]);
    			sleep(atoi(argv[2])); //system(penn);
    			if (!cont) break;
    		}
    	}
    	
    	else if(strcmp(argv[1], "-c")!=0)
    	{
    		// strcat(penn, argv[1]);
    		while(0==0)
    		{
    			system(argv[2]);
    			//system(argv[1]);
    			sleep(atoi(argv[1])); //system(penn);
    			if (!cont) break;
    		}
    	}
    
    return 0;
    }
     
  7. #6 bitmuncher, 06.06.2007
    bitmuncher

    bitmuncher Foren Gott

    Dabei seit:
    08.05.2007
    Beiträge:
    3.180
    Zustimmungen:
    3
    Wieso SIGINT? Strg+C löst Signal 15 aus und nicht Signal 2.
     
  8. #7 Mµ*e^13.5_?¿, 06.06.2007
    Mµ*e^13.5_?¿

    Mµ*e^13.5_?¿ Routinier

    Dabei seit:
    21.02.2006
    Beiträge:
    453
    Zustimmungen:
    0
    Also ich weiß ja nicht, was du wohl für ein Betriebssystem benutzen magst, aber mein Linux löst bei einem strg+c ganz normal ein SIGINT aus.
     
  9. #8 bitmuncher, 06.06.2007
    bitmuncher

    bitmuncher Foren Gott

    Dabei seit:
    08.05.2007
    Beiträge:
    3.180
    Zustimmungen:
    3
    Stimmt, mußte ich auch gerade feststellen. Gut daß ich nachgefragt habe. ;)
     
  10. keks

    keks nicht 1337 genug

    Dabei seit:
    17.01.2007
    Beiträge:
    401
    Zustimmungen:
    0
    Ort:
    Hessen
    Danke Mµ*e^13.5_?¿ [edit] grey,[/edit] und bitmuncher für die kompetenten antworten ihr habt mir sehr geholfen!
     
  11. #10 marcellus, 10.06.2007
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
Thema: c; endlosschleife abbrechen
Besucher kamen mit folgenden Suchen
  1. c# endlosschleife beenden

    ,
  2. endlosschleife c

    ,
  3. linux c endlosschleife beenden

    ,
  4. sigint in schleife,
  5. c endlosschlaufe unterbrechen,
  6. linux cp befehl abbrechen,
  7. linux shell abbrechen strg c,
  8. php endlosschleife stoppen
Die Seite wird geladen...

c; endlosschleife abbrechen - Ähnliche Themen

  1. Endlosschleife /var/named/chroot

    Endlosschleife /var/named/chroot: Hallo, ich habe ein kleines Problem auf meinem Root Server mit Centos 6.2 habe ich seit neustem eine Endlosschleife in dem Verzeichnis...
  2. debian 6 bootvorgang abbrechen und zur konsole gelangen

    debian 6 bootvorgang abbrechen und zur konsole gelangen: hallo zusammen, durch einen falschen eintrag in der xorg.conf erhalte ich nur noch einen schwarzen bildschirm wenn der gdm3 startet. auch...
  3. [PHP] while Abbrechen

    [PHP] while Abbrechen: Ich will einen while schleife nach 5 Durchläufen abbrechen, erhalte aber folgenden Fehler: Fatal error: Cannot break/continue 1 level Code:...
  4. CP Befehl abbrechen

    CP Befehl abbrechen: Hallo, ich weiß nicht ob es hier in den Thread passt, wenn nicht verschieben. Ich habe per NFS einen Ordner von einem Client auf einem SLES 10...
  5. Regelmäßiges Abbrechen der Internetverbindung bei Suse 10.0 und WLAN

    Regelmäßiges Abbrechen der Internetverbindung bei Suse 10.0 und WLAN: Hi wir haben hier ein Netzwerk, bestehend aus 6 Computern und 1 Server, das komplett unter Suse 10.0 läuft. Ans Internet angeschlossen ist das...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden