3

信号は実装によって異なります。APUE (Unix 環境での高度なプログラミング) には、第 2 版の 292 ページの「図 10.1 UNIX システム シグナル」など、いくつかの優れた表があります。

それでは、模範的なSIGWAITING. シグナルはドキュメントでは として表示されますintが、ほとんどの実装では#defineではなくを使用しているようですconst int

#defineしかし、標準は、信号がdであることに依存できることをどこでも規定していますか? または、事実上すべての既存の実装が#define. それとも、これはまったく悪い仮定ですか?

#define理論的根拠は次のとおりです。使用されることに依存できる場合、それを使用#ifdefしない実装からよりエキゾチックなシグナルを隠すために使用できます。定数名についてconst intは、このコンパイル時の決定を可能にする同様のメカニズムを知りません。

4

1 に答える 1

3

の POSIX (2008、2013) 仕様を参照してください<signal.h>。部分的に、それは言います:

<signal.h>ヘッダーは、システムで発生する信号を参照するために使用される次のマクロを定義するものとします。ここで定義されているシグナルは、SIG の文字で始まり、その後に大文字が続きます。マクロは、int 型と個別の値を持つ正の整数定数式に展開されます。値 0 はヌル信号として使用するために予約されています ( を参照kill())。追加の実装定義の信号がシステムで発生する場合があります。

…</p>

次のシグナルは、すべての実装でサポートされる必要があります…</p>

この後に信号名の表が続きます。リンク先のバージョンは標準の 2004 年版であり、信号名がマクロであることについてはそれほど明示的ではありませんが、新しいバージョンでは既存の慣行が体系化されています。

したがって、POSIX に準拠するには、シグナル名を#define'd にする必要があります。

于 2014-01-31T16:46:55.017 に答える