標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
XPG4.2 |
両方 | POSIX(ON) |
#define _XOPEN_SOURCE_EXTENDED 1
#include <signal.h>
void (*bsd_signal(int sig, void (*func)(int)))(int);
bsd_signal() 関数は、BSD 形式の signal() 関数を使用するよう作成 されたプログラムに、部分的に互換性のあるインターフェースを提供する ものです。
bsd_signal() が使用されるとき に SA_RESTART フラグが設定 されて SA_RESETHAND がクリアされるという点 で、BSD signal() は、ANSI signal() と異なっています。一方、signal() の場合は、これらのフラグの両方ともクリア され、_SA_OLD_STYLE が設定されます。
シグナルのアクションを確立するために使用できる関数として、signal()、 bsd_signal()、sigaction() の 3 つがあります。sigaction() 関数は、シグナルのアクションを確立する 重要な方法です。bsd_signal() 関数と signal() 関数は、それぞれ BSD と ANSI との 互換性のために用意されたものです。
sig 引数は、シグナル型です。サポートされているシグナル型のリストについては、表 1 または <signal.h> ヘッダーを参照してください。func 引数はシグナル・アクションです。これは、SIG_DFL、SIG_IGN、または入力引数を 1 つ受け取るシグナル・キャッチング関数のアドレスに 設定できます。
C++ の特殊な動作
C と C++ のリンケージ規約が非互換であるので、bsd_signal() は、開始ルーチン関数ポインターとして C++ 関数ポインターを受けとることが できません。C++ 関数ポインターを bsd_signal() に渡そうとすると、コンパイラーは、これをエラーとしてフラグを付けます。C 関数または C++ 関数を外部 "C" として宣言すると、これらの関数 を bsd_signal() に渡すことができます。
正常終了の場合、bsd_signal() は、このシグナル型用に確立された直前 のアクションを戻します。