08-把信号编号映射为字符串
10.2.4 把信号编号映射为字符串
在前面给出的例子中,我们都把信号名称写死。但是,在某些情况下,把信号编号转换成表示信号名称的字符串会更方便(甚至某些情况下有这个需求)。有几种方法可以实现这一点。其中一种方式是从静态定义列表中检索字符串:
sys_siglist是一个保存系统支持的信号名称的字符串数组,可以使用信号编号进行索引。
另一种方式是使用BSD定义的psignal()接口,这个接口很常用,且Linux也支持:
调用psignal()向stderr输出一个字符串,该字符串是你提供的msg参数,后面是一个冒号、一个空格和signo表示的信号名称。如果signo是无效的,输出信息将会进行提示。
更好的接口是strsignal()。它不是标准化的,但Linux和许多非Linux系统都支持它:
调用strsignal()会返回一个指针,描述signo所指定的信号。如果signo是无效的,返回的描述通常会有提示信息(一些支持该函数的UNIX系统返回NULL)。返回的字符串在下一次调用strsignal()前移植都是有效的,因此该函数不是线程安全的。
使用sys_siglist通常是最好的选择。通过这种方式,可以重写我们之前给出的信号处理程序,如下:
