有人可以告诉我这行是做什么的:
if(signal(SIGUSR1, handler) == (sighandler_t)-1)
这是我从练习中复制的一条线,它使它起作用,但我并不是真的理解它。有人可以向我解释一下吗? (这实际上是第二部分我不明白:(sighandler_t)-1的值是多少?)
谢谢:)
编辑:sighandler_t来自
typedef void (*sighandler_t)(int);
答案 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);
答案 1 :(得分:0)
(sighandler_t)-1
是减号,将其转换为sighandler_t
类型。您必须检查信号呼叫是否失败。