c; endlosschleife abbrechen

keks

keks

nicht 1337 genug
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;
}
 
Ich würde einfach die Tastenanschläge in der Schleife abfangen und auswerten ...
 
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.
 
Zuletzt bearbeitet:
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.
 
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;
}
 
Zuletzt bearbeitet:
Wieso SIGINT? Strg+C löst Signal 15 aus und nicht Signal 2.
 
Stimmt, mußte ich auch gerade feststellen. Gut daß ich nachgefragt habe. ;)
 
Danke Mµ*e^13.5_?¿ [edit] grey,[/edit] und bitmuncher für die kompetenten antworten ihr habt mir sehr geholfen!
 

Ähnliche Themen

C Code Hilfe!!! gesucht bei Dezimalzahl in Binärzahl for loop

Unix Webserver mit HTML Seite erstellen

"non blocking console input" wieder rückgängig machen?

String auf Konsole ausgeben

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

Zurück
Oben