2016-08-23 83 views
0

有人能告诉我这行做了什么:不明白信号

if(signal(SIGUSR1, handler) == (sighandler_t)-1) 

这是一条线,我从练习,这使得它的工作拷贝,但我真的不明白。有人可以向我解释这一点吗? (它实际上是第二部分我不明白:什么是(sighandler_t)-1的值)

谢谢:)

编辑:sighandler_t来自

typedef void (*sighandler_t)(int); 
+1

'(sighandler_t)-1'是负数字,投入到'sighandler_t'类型中。必须检查信号呼叫是否失败。 –

+0

好吧,现在我非常感谢你:) –

回答

3

首先,它是一种不好的风格,可能不可携带的代码,(sighandler_t)-1应该替换为预定义的信号处置之一。在我的系统,他们在接下来的方式

/* Fake signal functions. */ 
#define SIG_ERR ((__sighandler_t) -1)  /* Error return. */ 
#define SIG_DFL ((__sighandler_t) 0)  /* Default action. */ 
#define SIG_IGN ((__sighandler_t) 1)  /* Ignore signal. */ 

其它系统可以使用另一个值声明的,所以假设你使用相同的定义,我们可以得到下面的代码:

if(signal(SIGUSR1, handler) == SIG_ERR) { 
    /* got problem */ 
} else { 
    /* handler installed */ 
} 

此代码安装功能handler为信号处理器SIGUSR1并检查返回值以确保成功完成。 handler必须声明为void handler(int signo);

+0

谢谢你的回答!他们是默认声明还是我必须自己声明? –

+0

@ArnaudRochez这是一个标准声明,只包含'signal.h'。 – Sergio

+0

好的,谢谢你,先生:) –

0

(sighandler_t)-1是负号,将其转换为sighandler_t类型。您必须检查信号通话是否失败。