如何在iOS上获得当前的信号处理程序?

时间:2015-02-15 18:02:44

标签: ios c signals

您好我需要获取使用此方法设置的当前信号处理程序:

signal(SIGSEGV, handler);

怎么做?

1 个答案:

答案 0 :(得分:4)

不幸的是,C标准没有预见到读取处理程序的当前值。

但幸运的是,signal()在您更改处理程序时返回先前的值。因此,您可以轻微冒险:

typedef void (*sighandler_t)(int);  /* for convenience */

sighandler_t current_handler; 
current_handler = signal(SIGSEGV, SIG_IGN);  /* (1) */
signal (SIGSERV, current_handler); /* (2) */

有两种风险:

  • 导致signal()返回SIG_ERR可能会导致(非常不合理)错误。然后你会松开当前的处理程序!根据上面的iOS手册页,并根据您感兴趣的信号值,不符合错误的条件。
  • 如果在{1)和(2)之间提出SIGSEGV,则不会拦截它。但是,查看这两个语句,它们不太可能触发分段违规(SIGSEGV)