如何获取 iOS 上的当前信号处理程序?
How to get current signal handler on iOS?
您好,我需要获取使用此方法设置的当前信号处理程序:
signal(SIGSEGV, handler);
怎么做?
不幸的是,C 标准没有预见到读取处理程序的当前值。
但幸运的是,当您更改处理程序时,signal() return 是以前的值。因此,您可以冒一点风险:
typedef void (*sighandler_t)(int); /* for convenience */
sighandler_t current_handler;
current_handler = signal(SIGSEGV, SIG_IGN); /* (1) */
signal (SIGSERV, current_handler); /* (2) */
有两个风险:
- 可能存在(非常不可能的)错误导致
signal()
到 return SIG_ERR
。然后您将永远失去当前的处理程序!根据上面的 iOS 手册页,根据您感兴趣的信号值,不满足错误条件。
- 如果在 (1) 和 (2) 之间出现
SIGSEGV
,您将不会拦截它。但是,查看这两个语句,它们不太可能触发分段违规 (SIGSEGV)
您好,我需要获取使用此方法设置的当前信号处理程序:
signal(SIGSEGV, handler);
怎么做?
不幸的是,C 标准没有预见到读取处理程序的当前值。
但幸运的是,当您更改处理程序时,signal() return 是以前的值。因此,您可以冒一点风险:
typedef void (*sighandler_t)(int); /* for convenience */
sighandler_t current_handler;
current_handler = signal(SIGSEGV, SIG_IGN); /* (1) */
signal (SIGSERV, current_handler); /* (2) */
有两个风险:
- 可能存在(非常不可能的)错误导致
signal()
到 returnSIG_ERR
。然后您将永远失去当前的处理程序!根据上面的 iOS 手册页,根据您感兴趣的信号值,不满足错误条件。 - 如果在 (1) 和 (2) 之间出现
SIGSEGV
,您将不会拦截它。但是,查看这两个语句,它们不太可能触发分段违规 (SIGSEGV)