文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于处理SIGSEGV信号的问题

关于处理SIGSEGV信号的问题

时间:2007-03-06  来源:loughsky

当内存访问非法,触发SIGSEGV信号,这时系统缺省动作是退出  
  一般的自定义处理也是退出,但是如果希望捕获处理后程序能继续运行,则中断返回点仍旧在非法访问处,如此则进入一个   “非法访问--信号--处理--非法访问”的死循环中,请问,如何能够避免处理返回后不在触发信号而按照自己希望的流程走下去?
  使用setjmp,   longjmp函数可以。  
  例子:  
  #include   <setjmp.h>  
   
  static   void   sig_segv(int   signo);  
   
  static   jmp_buf   jmpbuffer;  
   
  int  
  main(void)  
  {  
          if(   setjmp(jmpbuffer)   !=   0   )   {  
                  /*   如果setjmp的返回值不等于零,表明是从SIGSEV的中断处理函数返回   */  
                  ...  
                  ...   /*   你的错误处理代码   */  
          }  
          signal(SIGSEGV,   sig_segv);  
          ...  
          ...   /*   你的代码   */  
  }  
   
  static   void  
  sig_segv(int   signo)    
  {  
          longjmp(jmpbuffer,   1);   /*   跳转到   setjmp,且setjmp的返回值!=0   */  
  }  
   
   
  具体可以看《unix   环境高级编程》的第7章第10节,总的来说,上面的两个函数是程序的非局部跳转。
相关阅读 更多 +
排行榜 更多 +
平衡球球

平衡球球

休闲益智 下载
平衡球球游戏

平衡球球游戏

休闲益智 下载
土耳其方块消除游戏

土耳其方块消除游戏

休闲益智 下载