Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Verständisfrage zu alarm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.12.2004, 14:45 Uhr
mike
Pinguinhüpfer
(Operator)


Also ich glaube ich verstehe ein bisschen mehr:
nach longjmp wird ja 1 zurückgegeben -> also wird
if (setjmp(progzust) != 0)
fprintf(stderr, "Timer fuer read abgelaufen");
ja 1 und fprintf wird ausgegeben. Aber warum bricht er nach der Funktion ab? Ich bin echt ratlos
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.12.2004, 15:50 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Probplem gelöst. read bricht anscheinend bei \n ab - warum weiß ich nicht.
Hatte oben ein paar includes vergessen ...

C++:
#include   <stdio.h>
#include   <setjmp.h>
#include   <signal.h>
#include   <sys/types.h>
#include   <sys/uio.h>
#include   <unistd.h>

#define MAX_ZEICHEN 255

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);
}



mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: