附加功能
在这节,我们描述一些依赖于具体实现的附加信号功能。
信号名
一些系统提供了数组
extern char *sys_siglist[];
|
数组的索引是信号号,通过指针指向信号名的字符串。
【FreeBSD 5.2.1, Linux 2.4.22和Mac OS X 10.3都提供这个信号名数组。Solaris 9也这么做,不过它使用的名字是_sys_siglist。】
这些系统一般也提供psignal函数。
|
字符串msg(这一般是程序名)输出到标准错误,后面跟一个冒号和一个空格,然后是信号的描述,然后是一个换行符。这个函数类似于perror(APUE 1.7节)
另一个常用函数是strsignal。这个函数类似于strerror(APUE1.7节)
|
给出一个信号号,strsignal将会返回一个字符串它描述了该信号。这个字符串能被应用程序打印出来。
【APUE中所描述的所有平台都提供psignal和strsignal函数,但也有一些不同。在Solaris 9上,strsignal如果信号号无效,那么会返回一个空指针,而FreeBSD5.2.1, Linux 2.4.22和Mac OS X 10.3返回一个字符串来指明该信号没有注册。同样,在Solaris上获得psignal的原形要包含<siginfo.h>头文件。
信号映射
Solaris提供了一对函数对应射信号号到信号名,反之亦然。
|
当写交互程序需要接受和打印信号名和信号号时这些函数非常有用。
sig2str函数转换信号号到字符串并在内存中存储结果,由str指向。调用者必须确认内存足够大,能够存下最大字符长度和结节的空字符。Solaris在<signal.h>中提供了一个常量SIG2STR_MAX用来定义最大字符长度。信号名的组程不包含”SIG”前缀。例如,信号SIGKILL转换名字为“KILL”存储。
str2sig函数转换信号名到信号号。信号号使用整型变量保存,由指针signop指向。信号名可以是没有“SIG”前缀的名字或十进制信号号的字符描述(也就是“9”这样)。
注意,惯例不使用sig2str和str2sig并且当它们失败后并不设置errno。