⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 siginfo.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// SigInfo.cpp,v 1.6 2004/06/20 14:31:02 jwillemsen Exp#include "ace/Log_Msg.h"#include "ace/Reactor.h"#include "ace/Event_Handler.h"#include "ace/Signal.h"#include "ace/OS_NS_unistd.h"#include "ace/OS_NS_string.h"#if !defined (ACE_LACKS_UNIX_SIGNALS)// Listing 1 code/ch11class MySignalHandler : public ACE_Event_Handler{public:  MySignalHandler () : ACE_Event_Handler()  { }  // Listing A code/ch11  int handle_signal (int signum,                     siginfo_t * siginfo = 0,                     ucontext_t * = 0)  {    ACE_DEBUG ((LM_INFO, ACE_TEXT ("Received signal [%S]\n"),                signum));    if (siginfo == 0)      {        ACE_DEBUG ((LM_INFO,                    ACE_TEXT ("No siginfo_t available for ")                    ACE_TEXT ("signal [%S]\n"),                    signum));        return 0;      }    // Listing A#if defined (__linux__)    // Listing B code/ch11    ACE_DEBUG ((LM_INFO,                ACE_TEXT ("errno for this signal is %d [%s]\n"),                siginfo->si_errno,                ACE_OS::strerror (siginfo->si_errno)));    ACE_DEBUG ((LM_INFO,                ACE_TEXT ("signal was sent by process %d")                ACE_TEXT (" / user %d\n"),                siginfo->si_pid,                siginfo->si_uid));    switch (siginfo->si_code)      {      case SI_TIMER:        ACE_DEBUG ((LM_INFO, ACE_TEXT ("Timer expiration\n")));        break;      case SI_USER:        ACE_DEBUG ((LM_INFO,                    ACE_TEXT ("Sent by kill, sigsend or raise\n")));        break;      case SI_KERNEL:        ACE_DEBUG ((LM_INFO,                    ACE_TEXT ("Sent by kernel\n")));        break;        // ...      };    // Listing B    // Listing C code/ch11    switch (signum)      {      case SIGFPE:        switch (siginfo->si_code)          {          case FPE_INTDIV:          case FPE_FLTDIV:            ACE_DEBUG ((LM_INFO,                        ACE_TEXT ("Divide by zero at %@\n"),                        siginfo->si_addr));            break;          case FPE_INTOVF:          case FPE_FLTOVF:            ACE_DEBUG ((LM_INFO,                        ACE_TEXT ("Numeric overflow at %@\n"),                        siginfo->si_addr));            break;          // ...          }        break;        // Listing C        // Listing D code/ch11      case SIGSEGV:        switch (siginfo->si_code)          {            // ...          };        break;        // Listing D        // Listing E code/ch11      case SIGCHLD:        ACE_DEBUG ((LM_INFO,                    ACE_TEXT ("A child process has exited\n")));        ACE_DEBUG ((LM_INFO,                    ACE_TEXT ("The child consumed %l/%l time\n"),                    siginfo->si_utime,                    siginfo->si_stime));        ACE_DEBUG ((LM_INFO,                    ACE_TEXT ("and exited with value %d\n"),                    siginfo->si_status));        break;        // ...      }    // Listing E#endif /* __linux__ */    return 0;  }};// Listing 1#endif /* ACE_LACKS_UNIX_SIGNALS */#if !defined (ACE_LACKS_UNIX_SIGNALS)int ACE_TMAIN (int, ACE_TCHAR *[]){#if defined (ACE_LACKS_FORK)  ACE_DEBUG ((LM_DEBUG,              "This example requires fork()\n"));#else  // Create a child process so that we can test our  // ability to handle SIGCHLD  // Listing 2 code/ch11  ACE_Sig_Set signalSet;  signalSet.fill_set ();  MySignalHandler h1;  ACE_Reactor::instance ()->register_handler (signalSet, &h1);  pid_t childPid = ACE_OS::fork ();  if (childPid == 0)      // This is the parent process.    {      // Exclude B      ACE_OS::sleep (10);      return 100;      // Exclude B    }  ACE_Reactor::instance ()->run_reactor_event_loop ();  // Listing 2#endif /* ACE_LACKS_FORK */  return 0;}#elseintACE_TMAIN (int, ACE_TCHAR *[]){  ACE_DEBUG ((LM_DEBUG,              "This example does not work on this platform.\n"));  return 1;}#endif /* !ACE_LACKS_UNIX_SIGNALS */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -