6

我需要用 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 时,此警告会导致分段错误。

4

2 回答 2

6

如果SA_SIGINFOstruct sigaction的成员中设置,则sa_flags使用类型的方法

void signalhandler(int, siginfo_t *, void *);

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

否则使用类型的方法

void signalhandler(int);

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

于 2012-05-12T17:24:19.670 回答
5

您的 sighupHandler 必须是以下两个之一:

void sighupHandler(int) //for sa_handler

或者

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

有关这方面的更多信息,请参阅此处此处

编辑:请参阅下面和我上面建议的链接以获得更好的清晰度。我认为在您的情况下,由于下面建议的通用存储,编译器只会生成警告,否则会生成错误。

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

于 2012-05-12T17:05:34.507 回答