/** * * @File : exo_03.cxx * * @Author : A. B. Dragut * * @Synopsis : restauration de l'action précédente complète * **/ #include #include #include #include // SIGINT, SIGTSTP #include // pause(), sleep() #include // struct sigaction #include "CExc.h" #include "nsSysteme.h" using namespace std; using namespace nsSysteme; namespace { struct sigaction OldAction; void Derout1 (int NumSig) { cout << "Debut fonction Derout1()" << endl; ::sleep (5); cout << "Fin fonction Derout1()" << endl; } // Derout1() void Derout2 (int NumSig) { cout << "Debut fonction Derout2()" << endl; ::sleep (5); Sigaction (NumSig, &OldAction, 0); cout << "Fin fonction Derout2()" << endl; } // Derout2() } // namespace anonyme int main(int argc, char * argv []) { try { if (argc != 1) throw CExc ("main()",string ("Usage : ") + argv [0]); struct sigaction Action; Action.sa_flags = 0; Action.sa_handler = Derout1; sigemptyset (&Action.sa_mask); sigaddset (&Action.sa_mask, SIGTSTP); Sigaction (SIGINT, &Action, 0); ::pause (); Action.sa_handler = Derout2; sigemptyset (&Action.sa_mask); Sigaction (SIGINT, &Action, &OldAction); for (;;); return 0; } catch (const CExc & Exc) { cerr <