signal.h
Go to the documentation of this file.
// -*- C++ -*-
#ifndef WIBBLE_SYS_SIGNAL_H
#define WIBBLE_SYS_SIGNAL_H
#include <wibble/sys/macros.h>
#include <wibble/exception.h>
#include <signal.h>
namespace wibble {
namespace sys {
namespace sig {
#ifdef POSIX
struct ProcMask
{
sigset_t oldset;
ProcMask(const sigset_t& newset, int how = SIG_BLOCK)
{
if (sigprocmask(how, &newset, &oldset) < 0)
throw wibble::exception::System("setting signal mask");
}
~ProcMask()
{
if (sigprocmask(SIG_SETMASK, &oldset, NULL) < 0)
throw wibble::exception::System("restoring signal mask");
}
};
struct Action
{
int signum;
struct sigaction oldact;
Action(int signum, const struct sigaction& act) : signum(signum)
{
if (sigaction(signum, &act, &oldact) < 0)
throw wibble::exception::System("setting signal action");
}
~Action()
{
if (sigaction(signum, &oldact, NULL) < 0)
throw wibble::exception::System("restoring signal action");
}
};
#endif
}
}
}
// vim:set ts=4 sw=4:
#endif
exception.h
macros.h
signal.h
wibble
Definition: amorph.h:17
wibble::exception::System
Base class for system exceptions.
Definition: exception.h:396