ºìÁªLinuxÃÅ»§
Linux°ïÖú

LINUXÏÂC++µÄ¹ÜÀíÐźÅ

·¢²¼Ê±¼ä:2006-12-24 00:34:15À´Ô´:ºìÁª×÷Õß:disney
¡¡¡¡Ã¿µ±½ø³ÌÖ´ÐÐÒ»¸öÁîÈËÌÖÑáµÄ¶¯×÷£¬ÒÔÖÂÓÚ Linux? Äں˷¢³öÒ»¸öÐźÅʱ£¬¸ÃÐźŶ¼±ØÐë±»´¦Àí¡£ÐźŴ¦Àí³ÌÐòͨ³£»áÊÍ·ÅһЩÖØÒª×ÊÔ´²¢ÖÕÖ¹Ó¦ÓóÌÐò¡£ÔÚÕâÖÖÇé¿öÏ£¬¶ÑÕ»ÉϵÄËùÓжÔÏóʵÀý¶¼´¦ÓÚδÆÆ»µ×´Ì¬¡£ÁíÒ»·½Ã棬Èç¹ûÕâЩÐźű»×ª»»³É C++ Òì³££¬ÄÇôÄú¿ÉÒÔÓÅÑŵص÷ÓÃÆä¹¹Ô캯Êý£¬²¢°²ÅŶà²ã catch ¿é£¬ÒÔ±ã¸üºÃµØ´¦ÀíÕâЩÐźš£

¡¡¡¡Çåµ¥ 2 Öж¨ÒåµÄ SignalExceptionClass£¬ÌṩÁ˱íʾÄں˿ÉÄÜ·¢³öÐÅºÅµÄ C++ Òì³£µÄ³éÏó¡£SignalTranslator ÊÇÒ»¸ö»ùÓÚ SignalExceptionClass µÄÄ£°åÀ࣬Ëüͨ³£ÓÃÀ´ÊµÏÖµ½ C++ Òì³£µÄת»»¡£ÔÚÈκÎ˲¼ä£¬Ö»ÄÜÓÐÒ»¸öÐźŴ¦Àí³ÌÐò´¦ÀíÒ»¸ö»î¶¯½ø³ÌµÄÒ»¸öÐźš£Òò´Ë£¬SignalTranslator ²ÉÓÃÁË singleton Éè¼Æģʽ¡£ÕûÌå¸ÅÄîͨ¹ýÓÃÓÚ SIGSEGV µÄ SegmentationFault ÀàºÍÓÃÓÚ SIGFPE µÄ FloatingPointException ÀàµÃµ½ÁËչʾ¡£

¡¡¡¡Çåµ¥ 2. ½«ÐźÅת»»³ÉÒì³£

ÒýÓÃ:
template class SignalTranslator
{
¡¡private:
¡¡¡¡class SingleTonTranslator
¡¡¡¡{
¡¡¡¡¡¡public:
¡¡¡¡¡¡¡¡SingleTonTranslator()
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡signal(SignalExceptionClass::GetSignalNumber(), SignalHandler);
¡¡¡¡¡¡¡¡}

¡¡¡¡¡¡¡¡static void SignalHandler(int)
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡throw SignalExceptionClass();
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡};

¡¡public:
¡¡¡¡SignalTranslator()
¡¡¡¡{
¡¡¡¡¡¡static SingleTonTranslator s_objTranslator;
¡¡¡¡}
};

// An example for SIGSEGV
class SegmentationFault : public ExceptionTracer, public exception
{
¡¡public:
¡¡¡¡static int GetSignalNumber() {return SIGSEGV;}
};

SignalTranslator g_objSegmentationFaultTranslator;

// An example for SIGFPE
class FloatingPointException : public ExceptionTracer, public exception
{
¡¡public:
¡¡¡¡static int GetSignalNumber() {return SIGFPE;}
};

SignalTranslator g_objFloatingPointExceptionTranslator;
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ