6

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 を送信すると、この警告によってセグメンテーション違反が発生します。

4

2 に答える 2

6

のメンバーSA_SIGINFOに が設定されている場合は、タイプのメソッドを使用しますstruct sigactionsa_flags

void signalhandler(int, siginfo_t *, void *);

struct sigactionのメンバーに割り当てられるハンドラ関数としてsa_sigaction

そうでなければ型のメソッドを使用する

void signalhandler(int);

struct sigactionのメンバーに割り当てられるハンドラ関数としてsa_handler

于 2012-05-12T17:24:19.670 に答える
5

sighupHandler は、次の 2 つのいずれかである必要があります。

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

于 2012-05-12T17:05:34.507 に答える