您好,我需要获取使用此方法设置的当前信号处理程序:
signal(SIGSEGV, handler);
怎么做?
Best Answer-推荐答案 strong>
不幸的是,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 手册页,根据您感兴趣的信号值,不满足错误的条件。
- 如果
SIGSEGV 将在 (1) 和 (2) 之间引发,您将不会拦截它。但是,查看这两个语句,它们不太可能触发分段违规 (SIGSEGV)
关于ios - 如何在 iOS 上获取当前信号处理程序?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/28529257/
|