Przenośny sposób na wychwytywanie sygnałów i zgłaszanie problemu użytkownikowi

Jeśli jakimś cudem w naszym programie wystąpi błąd, chcę złapać SIGSEGV i pozwolić użytkownikowi (być może klientowi GUI) z jednym kodem powrotu na wystąpienie poważnego problemu. Jednocześnie chciałbym wyświetlić informacje w wierszu poleceń, aby pokazać, który sygnał został złapany.

Dzisiaj nasz program obsługi sygnału wygląda następująco:

<code>void catchSignal (int reason) {
  std :: cerr << "Caught a signal: " << reason << std::endl;
  exit (1);
}
</code>

Słyszę krzyki przerażenia z powyższym, jak przeczytałem z tegowątek że złem jest nazywanie funkcji nie-reentrantowej z obsługi sygnału.

Czy istnieje przenośny sposób obsługi sygnału i dostarczania informacji użytkownikom?

EDYTOWAĆ: Lub przynajmniej przenośny w ramach POSIX?

questionAnswers(4)

yourAnswerToTheQuestion