c; endlosschleife abbrechen

Dieses Thema im Forum "C/C++" wurde erstellt von keks, 06.06.2007.

  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

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    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 Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    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 Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    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 Der Stillgelegte

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

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. 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!
     
  12. #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. linux cp befehl abbrechen

    ,
  2. linux shell abbrechen strg c

    ,
  3. 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. Scheinbar Endlosschleife nach Installation von atomicorp (centOS 5.5) - PHP Upgrade

    Scheinbar Endlosschleife nach Installation von atomicorp (centOS 5.5) - PHP Upgrade: Hallo Unixboard, meine Suche nach einer Lösung für mein Problem hat mich in euer Forum geführt. Über die Suchfunktion konnte ich leider nichts...
  3. 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...
  4. [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:...
  5. 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...