发个贴部问一下,《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。