sigtimedwait() - キューに入れられるシグナルの待機

標準

標準/拡張機能 C/C++ 依存項目

Single UNIX Specification、バージョン 2
Single UNIX Specification、バージョン 3

両方

OS/390 V2R7

形式

#define _XOPEN_SOURCE 500
#include <signal.h>

int sigtimedwait(const sigset_t *set, siginfo_t *info
                 const struct timespec *timeout);

機能説明

sigtimedwait() 関数は、set が指す sigset_t オブジェクト (シグナル・セット) から保留シグナルを選択して、そのシグナルを、システムの保留シグナル・セットからクリアして、そのシグナル番号を戻します。複数の保留シグナルがある場合、最も小さい番号のシグナルが選択 されます。

sigtimedwait() の呼び出し時に、シグナル・セット内に保留シグナルが 存在しない場合、そのスレッドは、シグナル・セット内の 1 つ以上の指定シグナ ルが保留になるまで、もしくは、キャッチされた非ブロック化シグナルが割 り込むまで、中断します。set が指す sigset_t オブジェクト内に定義されたシグナルは、この ルーチンの呼び出しの間、非ブロック化でき、その他のスレッドが 現在これらのシグナルを待機中でない場合には、スレッドが 呼び出しから戻るときにブロックされます。

複数のスレッドが sigtimedwait() を使用して同じシグナルを 待機している場合には、同じタイプの 2 番目のシグナルが受信されるまで 、これらのスレッドの 1 つだけがシグナル番号と共にこのルーチンから戻されます。

info 引数が NULL 以外の場合、関数 sigtimedwait() は sigwait() 関数と同じ動作をとります。info 引数が NULL でない場合、sigtimedwait() は、sigwait() と同じ動作をするのに加えて、選択したシグナル番号を si_signo メンバーに入れて、シグナルの原因を si_code メンバーに入れます。さらに、値が選択シグナルへのキュー内にある場合、sigtimedwait() はその値を infosi_value メンバーに入れます。ただし、選択したシグナルのキューに値がない場合、si_value の内容は未定義です。

sigtimedwait() 関数は、set で指定されたシグナルがいずれも保留状態ではないことが分かると、timeout で参照されている timespec 構造体内に指定されている時間の間、待機します。timeout が指す timespec 構造体がゼロ値の場合、および set で指定されたシグナルがいずれも保留状態ではない場合、sigtimedwait() は、即時にエラーを戻します。<limits.h> に定義されているように、INT_MAX を設定された tv_sec フィールドを持つ timespec は、sigtimedwait() サービスを、シグナルが受信されるまで待機させます。timeout が NULL 以外のポインターの場合、その動作は必ずしもすべてのプラットフォームで同じではありませんが、このプラットフォームでは、timespec 構造体に INT_MAX を 設定された tv_sec フィールドが含まれている場合と同じように扱われます。

使用上の注意

この関数では、SIGTHSTOP および SIGTHCONT シグナルの使用はサポートされていません。

戻り値

正常に実行された場合には、sigtimedwait() はシグナル番号を戻します。

正常に実行されなかった場合、sigtimedwait() は -1 を戻して、errno を次のいずれかの 値に設定します。

エラー・コード
説明
EAGAIN
セットにより指定されていないシグナルは、指定タイムアウト期間内に生成されませんでした。
EINTR
キャッチされた非ブロック化シグナルが待機に割り込みました。この呼び出しの場合、これ以上の待機は行われません。再度待機するには、sigtimedwait() を再発行してください。
EINVAL
set は、無効またはサポートされないシグナル番号が入ってい る sigset_t を指します。

関連情報