#include sig_t signal(int sig, sig_t func) { struct sigaction newsa, oldsa; int i; newsa.sa_handler = func; newsa.sa_mask = 0; /* empty set */ newsa.sa_flags = SA_RESTART; i = sigaction(sig, &newsa, &oldsa); if (i < 0) return SIG_ERR; return oldsa.sa_handler; }