000
22.12.2004, 13:11 Uhr
mike
Pinguinhüpfer (Operator)
|
Hi! Ich hab folgenden Code
C++: |
#include <setjmp.h> #include <signal.h>
static void sig_alrm(int signr); static jmp_buf progzust;
int main(void) { int n; char zeile[MAX_ZEICHEN];
if (signal(SIGALRM, sig_alrm) == SIG_ERR) fprintf(stderr, "kann Signalhandler sig_alrm nicht installieren");
if (setjmp(progzust) != 0) fprintf(stderr, "Timer fuer read abgelaufen");
alarm(15); if ( (n=read(STDIN_FILENO, zeile, MAX_ZEICHEN)) < 0) fprintf(stderr, "Lesefehler aufgetreten");
alarm(0);
write(STDOUT_FILENO, zeile, n);
exit(0); }
static void sig_alrm(int signr) { longjmp(progzust, 1); }
|
Nach 15 Sekunden wird der Lesevorgang in der Konsole korrekt abgebrochen. Meine Frage: setjmp speichert ja den aktuellen Programmzustand. D.h., dass nach dem longjmp in sig_alrm wieder alles von vorne beginnen müsste -> 15 Sekunden warten und Lesevorgang beginnen. Also in dem Sinn eine Endlosschleife. Aber warum bricht er tatsächlich nach 15 Sekunden ab?
Danke im Voraus, mfg --
|