别了解信号

时间:2016-08-23 14:04:36

标签: c signals

有人可以告诉我这行是做什么的:

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

这是我从练习中复制的一条线,它使它起作用,但我并不是真的理解它。有人可以向我解释一下吗? (这实际上是第二部分我不明白:(sighandler_t)-1的值是多少?)

谢谢:)

编辑:sighandler_t来自

typedef void (*sighandler_t)(int);

2 个答案:

答案 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类型。您必须检查信号呼叫是否失败。