日期:2014-05-16  浏览次数:20672 次

发个贴部问一下,《Unix高级环境编程》一书中的代码
typedef   void   Sigfunc(int);           //这一句不是很懂,望高人指点一下
#if   defined(SIG_IGN)   &&   !defined(SIG_ERR)
#define   SIG_ERR   ((Sigfunc*)-1)       //这一句也不是很懂,望高人指点一下
#endif

------解决方案--------------------
typedef void Sigfunc(int);
定义一个函数指针,函数指针都是这么定义的,意思是Sigfunc是一个函数指针类型,指向void xxx(int)这样的函数。

#define SIG_ERR ((Sigfunc*)-1)
这是将-1强制转换成Sigfunc*类型。比如:
Sigfunc* ptr = SIG_ERR;

此时ptr是一个函数指针,但是并不指向真实的函数,而是指向-1,这只是用来做错误判断用就好像:
if(signal(SIGALRM,sig_handler)==SIG_ERR) {
}

signal需要返回原来的handler,如果出错,它也得返回一个函数指针,那就是-1。