signal funzt net
-
hallo,
ich habe das beispiel hier:
http://pronix.linuxdelta.de/C/standard_C/c_programmierung_23_2.shtml
getestet.
aber das geht nicht! was könnte der grund sein?
ich habe debian 4.0.
gruß,
s.n.
-
Aus Deiner Fehlerbeschreibung entnehme ich, daß Du wahrscheinlich etwas falsch gemacht hast.
-
-
das ist mein versuch und macht mich garnicht kluch:
#include <unistd.h> void strg_c (int sig) { int c; if(sig != SIGINT) return; else { printf("\nWollen Sie das Programm beenden (j/n) : "); c=getchar(); if(c == 'j') exit (0); else return; } } int main() { signal(SIGINT,strg_c); while(1) { printf("%d",1); } return 88; }
-
und was funzt net?
-
dreimal darfst du raten ... das programm beendet, ach wenn man nicht 'j' tippt.
-
#include<unistd.h>
#include<stdio.h>
#include<signal.h>void strg_c (int sig)
{
int c;
if((sig =! SIGINT))
return;
else
{
printf("\nWollen Sie das Programm beenden (j/n): ");
c = getchar();
if(c=='j')
exit (0);
else
return;
}
}
int main()
{
signal(SIGINT, strg_c);
while(1)
{
printf("%d",1);
}
return 0;
}Bei mir geht es so.
Ich finde die Bücher von Jürgen Wolf C A-C, C++ A-C und Linux- Unixprogrammierung sehr gut.
-
Sorry für die Formatierung.
Werde es beim nächsten Mal besser machen.
-
return 88;
Verfolgst du eine bestimmte Intention?
-
knivil schrieb:
return 88;
Verfolgst du eine bestimmte Intention?
ja, ich würd gern mal das strg-c abfangen können.
-
sigint n00b schrieb:
dreimal darfst du raten ... das programm beendet, ach wenn man nicht 'j' tippt.
Wir raten hier nicht, sondern versuche zu helfen. Offensichtlich hast Du es noch nicht verstanden, wie so ein Forum funktioniert: Du stellst eine Frage und wir antworten. Und zu der Frage gehört eine Erläuterung, was nicht funktioniert und was Du bereits ausprobiert hast und mit welchem Effekt.
Aber dennoch werde ich mal hier was dazu schreiben:
Im Signalhandler printf zu verwenden, kann für das Programm tödlich sein. In Signalhandlern darf selbst die Standardbibliothek nicht verwendet werden. Es könnte ja sein, dass das Programm sich gerade in der Standardbibliothek befindet und es dabei unterbrochen wird. Es ist nicht gewährleistet, dass zu jedem beliebigen Zeitpunkt die internen Strukturen sich in einem konsistenter Zustand befinden.
Bei Deinem Programm ist die Wahrscheinlichkeit, dass printf reentrant aufgerufen wird, sehr hoch, da Dein Hauptprogramm nichts anderes tut, als printf aufzurufen. Das führt mit ziemlicher Sicherheit zum Fehlverhalten.
-
sigint n00b schrieb:
knivil schrieb:
return 88;
Verfolgst du eine bestimmte Intention?
ja, ich würd gern mal das strg-c abfangen können.
die frage von knivil war keine technische, sonderne eine politische.
tntnet schrieb:
Wir raten hier nicht, sondern versuche zu helfen.
nicht nur das, wir sind sogar so vermessen, dass wir uns etwas freundlichkeit erwarten.
du brauchst übrigens stdlib.h für exit und nicht unistd.h. grundsätzliche sollte man io in signal handlern vermeiden. ebenso sollte man signal handler sehr kurz gestalten. auf eingaben des users zu warten, ist nicht kurz.
-
besserwisser schrieb:
..war keine technische, sonderne eine politische.
..nö, dann würd ich ins politikforum posten. und zwar return 18 :D.
bei uns hieß es früher in der clique immer egal ist schieße oder 88, scheisse riecht von allen seiten gleich ... :p
fetschteste
mfg.