您好我需要获取使用此方法设置的当前信号处理程序:
signal(SIGSEGV, handler);
怎么做?
答案 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手册页,并根据您感兴趣的信号值,不符合错误的条件。 SIGSEGV
,则不会拦截它。但是,查看这两个语句,它们不太可能触发分段违规(SIGSEGV)