簡體   English   中英

用sigaction處理信號

[英]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_handlersa_sigaction

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM