呼び出しスレッドのシグナルマスクを変更または検査するには、thr_sigsetmask(3C) を使用します。
#include <thread.h> #include <signal.h> int thr_sigsetmask(int how, const sigset_t *set, sigset_t *oset);
thr_sigsetmask() は、呼び出しスレッドのシグナルマスクを変更または検査します。各スレッドは、スレッド専用のシグナルマスクを持っています。新しいスレッドは、呼び出しスレッドのシグナルマスクと優先順位を継承します。ただし、保留中のシグナルは継承の対象にはなりません。保留中のシグナルは、新しいスレッドでは空になります。
引数 set の値が NULL 以外の場合、set は、現在ブロックされているシグナルセットを変更するシグナルセットになります。set の値が NULL の場合、how の値は意味を持たず、スレッドのシグナルマスクは変更されません。この動作を利用して、現在ブロックされているシグナルについて問い合わせることができます。
how の値には、セットの変更方法を指定します。how は、次のいずれかの値をとります。
SIG_BLOCK — set は、ブロックするシグナルセットになります。これらのシグナルは、現在のシグナルマスクに追加されます。
SIG_UNBLOCK — set は、ブロックを解除するシグナルセットになります。これらのシグナルは、現在のシグナルマスクから削除されます。
SIG_SETMASK — set は、新しいシグナルマスクになります。現在のシグナルマスクは、 set で置き換えられます。
thr_sigsetmask () は、正常終了時に 0 を返します。次のいずれかの条件が検出された場合、thr_sigsetmask() は失敗し、対応する値を返します。
EINVAL
説明:set が NULL 以外なのに、how の値が未定義です。