SIGINTERRUPT(3) FreeBSD ライブラリ関数マニュアル SIGINTERRUPT(3)
名称
siginterrupt − シグナルがシステムコールを中断できるようにする |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <signal.h> int |
siginterrupt(int sig, int flag); |
解説 |
siginterrupt() 関数を使用して、システムコールが指定のシグナルによって割り 込まれたときに、システムコール再開始の動作を変更します。フラグが偽 (0) の 場合、システムコールは、指定のシグナルによって割り込みされ、しかもデータ がまだ転送されていない場合に再開始されます。システムコールの再開始は、 4.2BSD 以降のデフォルトの動作であり、 FreeBSD での signal(3) のデフォルト の動作です。 フラグが真 (1) の場合、システムコールの再開始は無効になります。システム コールが指定のシグナルによって割り込みされ、しかもデータが転送されていな い場合、システムコールは −1 で返り、グローバル変数 errno は EINTR に設定 されます。データの転送を開始した中断されたシステムコールは、実際に転送さ れたデータの量を返します。システムコール割り込みは、 4.1BSD と AT&T System V UNIX システムに見られるシグナルのふるまいです。 新しい 4.2BSD シグナル処理のセマンティクスはどちらにしても変更されていま せん。最も注目すべきは、シグナルハンドラは、後続の sigaction(2) 呼び出し によって明示的に変更されるまで、そして sigaction(2) で文書化したようにシ グナルマスクが動作するまで、必ずインストールされたままになることです。プ ログラムは、プログラムの実行の間、必要なだけ頻繁に再起動可能なシステム コール操作と割り込み可能なシステムコール操作の間で切り替えできます。 シグナルハンドラの実行の間に siginterrupt(3) を呼び出すと、捕捉される次の シグナルで新しい処置が行われます。 |
注
このライブラリルーチンは、 4.2BSD では利用できない sigaction(2) システム コールの拡張を使用しています。ですから、後方互換性が必要な場合、これは使 用しないでください。 |
戻り値
関数 siginterrupt() は、処理が成功すると値 0 を返します。そうでない場合、 値 -1 が返され、グローバル変数 errno が設定されてエラーを示します。 |
エラー
siginterrupt() 呼び出しは、次の場合に失敗します: |
[EINVAL]
sig は有効なシグナル番号ではありません。 関連項目 |
sigaction(2), sigblock(2), sigpause(2), sigsetmask(2), signal(3) |
歴史
siginterrupt() 関数は 4.3BSD で登場しました。 FreeBSD 10.0 June 4, 1993 FreeBSD 10.0 |