如何修复信号处理程序分配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修复信号处理程序分配相关的知识,希望对你有一定的参考价值。
对于Linux C编程,我有这个处理程序和main方法:
void handler(int number, signinfo_t, void *ignore){
printf("Signaling %d
", si->si_pid);
}
int main(){
struct sigaction sig;
sig.sa_flags = SA_SIGINFO;
sigemptyset(&sig.sa_mask);
sig.sa_handler = handler // This line has error
如果我只使用1个参数void handler(int num)
创建处理程序,它可以正常工作;但是,我将无法使用si->si_pid
。我得到的警告是:
warning: assignment to __sighandler_t from an incompatible pointer type
-Wincompatible-pointer-types
sig.sa_handler = handler;
我会改为sig.sa_action
吗?我想修复警告
答案
您正在将处理函数分配给sig
的错误成员。 struct 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);
};
sig.sa_handler
是一个只有一个参数的函数,即信号编号。当您使用SA_SIGINFO
标志时,您需要将3参数函数分配给sig.sa_sigaction
。
int main(){
struct sigaction sig;
sig.sa_flags = SA_SIGINFO;
sigemptyset(&sig.sa_mask);
sig.sa_sigaction = handler;
以上是关于如何修复信号处理程序分配的主要内容,如果未能解决你的问题,请参考以下文章