我需要用sigaction处理一些信号,但是当我编译我的代码时,我得到这个错误:
警告:从不兼容的指针类型分配
代码是:
struct sigaction hup_act;
...
hup_act.sa_flags=SA_SIGINFO;
hup_act.sa_sigaction = sighupHandler;
sigaction(SIGHUP, &hup_act, NULL);
Run Code Online (Sandbox Code Playgroud)
警告在hup_act.sa_sigaction分配上.当我将sighup发送到我的应用程序时,此警告会导致分段错误.
如果SA_SIGINFO在struct sigaction's成员中设置sa_flags使用类型的方法
void signalhandler(int, siginfo_t *, void *);
Run Code Online (Sandbox Code Playgroud)
作为要分配给struct sigaction成员的处理函数sa_sigaction
否则使用类型的方法
void signalhandler(int);
Run Code Online (Sandbox Code Playgroud)
作为要分配给struct sigaction成员的处理函数sa_handler.
你的sighupHandler必须是下面两个中的一个:
void sighupHandler(int) //for sa_handler
Run Code Online (Sandbox Code Playgroud)
要么
void sighupHandler(int, signinfo_t *, void *) //for sa_sigaction which is your case
Run Code Online (Sandbox Code Playgroud)
编辑:请参阅下面和我上面建议的链接,以便更清晰.我认为在你的情况下,由于下面建议的常见存储,编译器只生成警告,否则它会产生错误.
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);
};
Run Code Online (Sandbox Code Playgroud)
在某些体系结构中涉及到一个联合:不要分配给两者
sa_handler和sa_sigaction.
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |