プログラムのシグナル処理を signal() から sigaction() に移行中です。
UNIX 仕様によると、astruct sigaction
には少なくとも 4 つのメンバーが必要です。sa_handler
、sa_mask
、sa_flags
およびsa_sigaction
。
次のように構造を定義すると、すべてが正常に見えます。
...
#include <signal.h>
...
struct sigaction sa;
しかし、値を に割り当てようとするsa_handler
と、メンバーが存在しません。代わりに、次のように表示されます。
私は自分のsignal.h
andを調べましたbits/sigaction.h
(ご参考までに、どちらにも 1092 行ありません)。何も問題はないようです。
私もこのメンバー名をそのまま使ってみましたが、コンパイラは
タイプ 'void (*)(int)' からタイプ 'union' に代入するときの比較できないタイプ
これにより、コンパイラ/IDE が構造の定義を処理する方法に何か問題があると思われますが、診断方法については私の頭の上にあります。
ヘルプや提案をいただければ幸いです。
システム情報:
- デビアン 8
- Linux 3.16.0-4-amd64
- gcc 4.9.2 (デビアン 4.9.2-10)
- 日食 CDT 3.8.1
更新 - 2016 年 8 月 3 日
これらの 2 つのスレッドhereとhereが見つかりました。これは、プリプロセッサ シンボル_POSIX_C_SOURCE
と_XOPEN_SOURCE
それぞれを定義することを提案しています。それぞれ (一度に 1 つずつ) を定義し、両方とも互換性のない型の問題を「修正」しました (値を sa.__sigaction_handler に正常に割り当てました)。しかし、それらは両方とも、タイプ intptr_t (スレッド関数管理に使用される) を使用する私のソフトウェアの機能を壊し、その理由で削除されました。
ただし、これを行うと問題は解決しました。コンパイラがエラーをスローすることなく、変数を sa.sa_handler に割り当てることができるようになりました。IDE ではまだ存在しないメンバーとして表示されますが (上記のリンクの画像と同じ)、これは小さな問題です。