powerd++  0.4.4
signal.hpp
Go to the documentation of this file.
1 
7 #ifndef _POWERDXX_SYS_SIGNAL_HPP_
8 #define _POWERDXX_SYS_SIGNAL_HPP_
9 
10 #include "error.hpp" /* sys::sc_error */
11 
12 #include <csignal>
13 
14 namespace sys {
15 
19 namespace sig {
20 
24 struct error {};
25 
29 using sig_t = void (*)(int);
30 
35 class Signal {
36  private:
40  int const sig;
41 
45  sig_t const handler;
46 
47  public:
58  Signal(int const sig, sig_t const handler) :
59  sig{sig}, handler{::signal(sig, handler)} {
60  if (this->handler == SIG_ERR) {
61  throw sc_error<error>{errno};
62  }
63  }
64 
68  ~Signal() {
69  ::signal(this->sig, this->handler);
70  }
71 };
72 
73 } /* namespace sig */
74 
75 } /* namespace sys */
76 
77 #endif /* _POWERDXX_SYS_SIGNAL_HPP_ */
sys::sc_error
Can be thrown by syscall function wrappers if the function returned with an error.
Definition: error.hpp:26
sys::sig::error
The domain error type.
Definition: signal.hpp:24
sys
Wrappers around native system interfaces.
sys::sig::Signal::~Signal
~Signal()
Restore previous signal handler.
Definition: signal.hpp:68
sys::sig::Signal::Signal
Signal(int const sig, sig_t const handler)
Sets up the given handler.
Definition: signal.hpp:58
sys::sig::sig_t
void(*)(int) sig_t
Convenience type for signal handlers.
Definition: signal.hpp:29
sys::sig::Signal::handler
const sig_t handler
The previous signal handler.
Definition: signal.hpp:45
sys::sig::Signal
Sets up a given signal handler and restores the old handler when going out of scope.
Definition: signal.hpp:35
sys::sig::Signal::sig
const int sig
The signal this handler is handling.
Definition: signal.hpp:40
error.hpp
Provides system call error handling.