スポンサーリンク

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

スポンサーリンク