Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » sigaction funktion mit variablen

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
05.04.2007, 17:35 Uhr
flappinski



Hallo Leute,
ich bin einfach zu doof, das folgende Problem zu lösen:
ich will, das mein Program bei CTRL+C noch die Daten, die bisher gesammelt wurden rausschreibt. Nun bin ich mit sigaction und co schon ziemlich weit, siehe hier:

C++:


// function, when CTRL-C is pressed
static void handler(int signum)
{
    std::cerr << "processed interrupped -> will write out data so far\n";

***


    exit(1);
}


int main(int argc, char *argv[] ){

    struct sigaction sa;

    // initialize signaling for the CTR-C Mode
    sa.sa_handler = handler;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = SA_RESTART; /* Restart functions if
                                 interrupted by handler */

    if (sigaction(SIGINT, &sa, NULL) == -1){
    std::cerr << "Problems with Signal-Processing\n";
    }

(....)

string data;

}





bei *** will ich jetzt noch auf data zugreifen. Sollte doch eigentlich ganz einfach sein, aber wie übergebe ich die Daten an die handler_Funktion?

Danke schon mal für die Hilfe,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.04.2007, 17:39 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
in der Form nicht - leg die daten in globale variablen, oder evtl saubere: in eine singleton-klasse, auf die kannste dann quasi-global zugreifen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.04.2007, 17:46 Uhr
flappinski



1) vielleicht in einer anderen Form?
2) singleton hör ich zum ersten Mal, habe kurz gegoogelt. Lohnt sich der Aufwand, das zu lernen? Vielleicht doch global, oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.04.2007, 18:10 Uhr
flappinski



schau mal, was ich gerade gefunden habe:

C++:



The following C code illustrates how to use the SIGINT and SIGQUIT signals to shutdown a UNIX application process when a user types control-C or control-\, respectively. Much of the error handling logic has been omitted to save space and reduce unnecessary details.

/* Global variables that control
   process shutdown. */

sig_atomic_t graceful_quit = 0;
sig_atomic_t abortive_quit = 0;

/* Signal handler for SIGINT. */
void SIGINT_handler (int signum)
{
  assert (signum == SIGINT);
  graceful_quit = 1;
}

/* Signal handler for SIGQUIT. */
void SIGQUIT_handler (int signum)
{
  assert (signum == SIGQUIT);
  abortive_quit = 1;
}

/* ... */

int main (void)
{
  struct sigaction sa;
  sigemptyset (&sa.sa_mask);
  sa.sa_flags = 0;

  /* Register the handler for SIGINT. */
  sa.sa_handler = SIGINT_handler;
  sigaction (SIGINT, &sa, 0);

  /* Register the handler for SIGQUIT. */
  sa.sa_handler =  SIGQUIT_handler;
  sigaction (SIGQUIT, &sa, 0);

  /* Run the main event loop. */
  while (graceful_quit == 0
         && abortive_quit == 0)
    do_work ();

  if (abortive_quit == 1) {
    _exit (1);
  }
  else if graceful_quit {
    clean_up ();
    exit (0);
  }

  /* NOTREACHED */
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.04.2007, 13:42 Uhr
Pler
Einer von Vielen
(Operator)


Hi!
Eventuell koenntest du noch was mit Spruengen machen. Aber das ist dann auch nicht schoener als globale Variablen.
Ich wuerde es einfach global machen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


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: