有人能告诉我这行做了什么:不明白信号
if(signal(SIGUSR1, handler) == (sighandler_t)-1)
这是一条线,我从练习,这使得它的工作拷贝,但我真的不明白。有人可以向我解释这一点吗? (它实际上是第二部分我不明白:什么是(sighandler_t)-1的值)
谢谢:)
编辑:sighandler_t来自
typedef void (*sighandler_t)(int);
有人能告诉我这行做了什么:不明白信号
if(signal(SIGUSR1, handler) == (sighandler_t)-1)
这是一条线,我从练习,这使得它的工作拷贝,但我真的不明白。有人可以向我解释这一点吗? (它实际上是第二部分我不明白:什么是(sighandler_t)-1的值)
谢谢:)
编辑:sighandler_t来自
typedef void (*sighandler_t)(int);
首先,它是一种不好的风格,可能不可携带的代码,(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);
(sighandler_t)-1
是负号,将其转换为sighandler_t
类型。您必须检查信号通话是否失败。
'(sighandler_t)-1'是负数字,投入到'sighandler_t'类型中。必须检查信号呼叫是否失败。 –
好吧,现在我非常感谢你:) –