用sigaction处理信号

时间:2012-05-12 16:44:36

标签: c unix signals

我需要用sigaction处理一些信号,但是当我编译代码时,我得到了这个错误:

  

警告:从不兼容的指针类型

分配

代码是:

struct sigaction hup_act;
...
hup_act.sa_flags=SA_SIGINFO;
hup_act.sa_sigaction = sighupHandler;
sigaction(SIGHUP, &hup_act, NULL);

警告在hup_act.sa_sigaction分配上。当我将sighup发送到我的应用程序时,此警告会导致分段错误。

2 个答案:

答案 0 :(得分:6)

如果在SA_SIGINFO的成员struct sigaction中设置了sa_flags,请使用类型

的方法
void signalhandler(int, siginfo_t *, void *);

作为分配给struct sigaction成员sa_sigaction

的处理函数

否则使用类型

的方法
void signalhandler(int);

作为分配给struct sigaction成员sa_handler的处理函数。

答案 1 :(得分:5)

你的sighupHandler必须是下面两个中的一个:

void sighupHandler(int) //for sa_handler

void sighupHandler(int, signinfo_t *, void *) //for sa_sigaction which is your case

有关此内容的详细信息,请参阅herehere

编辑:为了更清晰,请参阅下面和我建议的链接。我认为在你的情况下,由于下面建议的常见存储,编译器只生成警告,否则会产生错误。

  

sigaction结构定义为:

struct sigaction {
    void     (*sa_handler)(int);
    void     (*sa_sigaction)(int, siginfo_t *, void *);
    sigset_t   sa_mask;
    int        sa_flags;
    void     (*sa_restorer)(void);
};
  

在某些体系结构中涉及联合:不要分配给sa_handlersa_sigaction