Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1814393
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-31 07:38:46

在本节,我们描述一些补充的实现相关的信号特性。


信号名


一些系统提供了数组:extern char *sys_siglist[];。这个数组索引是信号号,给出信号的字符串名字的一个指针。


FreeBSD、Linux和Mac OS X都提供这个信号名的数组。Solaris也有,但使用了名字_sys_siglist。


这些系统通常也提供函数psignal。



  1. #include <signal.h>

  2. void psignal(int signo, const char *msg);


字符串msg(通常是程序名)被输出到标准错误,接着是一个冒号和一个空格,接着是一个信号的描述,最后是一个换行符。这个函数类似于perror(1.7节)


另一个普遍的函数是strsignal。这个函数和strerror相似(1.7节)。



  1. #include <string.h>

  2. char *strsignal(int signo);

  3. 返回描述信号的字符串指针。


给定一个信号号,strsignal将返回一个描述这个信号的字符串。这个字符串可以被应用用来打开关于收到的信号的错误消息。


本 文的所有平台都提供psignal和strsignal函数,但是有区别。在Solaris 9上,strsignal将返回一个空指针,如果信号号无效,而FreeBSD、Linux、Mac OS X返回指明这个信号号不识别的信息。还有为了得到Solaris上的psignal的函数原型,你需要包含


信号映射


Solaris提供了一对函数来把一个信号号和一个信号名相互映射。



  1. #include <signal.h>

  2. int sig2str(int signo, char *str);

  3. int str2sig(const char *str, int *signop);

  4. 成功返回0,错误返回-1.


这些函数在写一个需要接受和打印信号名和数值的交互程序时很有用。


sig2str 函数把给定信号号翻译为一个字符串并把结果存储在由str指向的内存里。调用者必须保证内存足够大以容纳最长的字符串,包括终止空字节。Sloaris提 供了常量SIG2STR_MAX在里来定义最大字符串长度。字符串由没有“SIG”前缀的信号名组成。例如,翻译 SIGKILL会导致字符串“KILL”被存储在str内存缓冲里。

阅读(1341) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~