[英]Handle signal with sigaction
我需要用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發送到我的應用程序時,此警告會導致分段錯誤。
如果在struct sigaction
的成員sa_flags
設置了SA_SIGINFO
則使用類型的方法
void signalhandler(int, siginfo_t *, void *);
作為分配給struct sigaction
的成員sa_sigaction
處理函數
否則使用類型的方法
void signalhandler(int);
作為分配給struct sigaction
的成員sa_handler
處理函數。
你的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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.