我需要用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发送到我的应用程序时,此警告会导致分段错误。
答案 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
编辑:为了更清晰,请参阅下面和我建议的链接。我认为在你的情况下,由于下面建议的常见存储,编译器只生成警告,否则会产生错误。
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_handler
和sa_sigaction
。