日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
sigprocmask |
現在のシグナル・マスクを設定します。
#include <signal.h>int sigprocmask (int how, const sigset_t *set, sigset_t *o_set);
how
マスクされたシグナルのセットをどのように変更するかを示す整数値。以下のいずれかの値を使用します。
SIG_BLOCK 結果として得られるセットは,現在のセットと, set 引数がポイントしているシグナル・セットのユニオンです。 SIG_UNBLOCK 結果として得られるセットは,現在のセットと, set 引数がポイントしているシグナル・セットの補集合のインタセクションです。 SIG_SETMASK 結果として得られるセットは, set 引数がポイントしているシグナル・セットです。
set
シグナル・セット。set 引数の値に応じて,次の意味を持ちます。
- NULL でない---現在ブロックされているセットを変更するために使用されるシグナルのセットをポイントする。
- NULL---how 引数の値は意味を持たず,プロセス・シグナル・マスクは変更されない。したがって,この呼び出しは現在ブロックされているシグナルを照会する目的に使用できる。
o_set
呼び出しの時点で有効だったシグナル・マスクが格納される位置への NULL でないポインタ。
sigprocmask関数は,呼び出し元プロセスのシグナル・マスクの確認または変更に使用されます。一般に,コードのクリティカル・セクションの間は sigprocmaskで SIG_BLOCK 値を使用してシグナルをブロックし, sigprocmaskで SIG_BLOCK 値から返された以前の値にマスクを復元するときには sigprocmaskで SIG_SETMASK 値を使用します。
sigprocmask関数の呼び出しの後に,保留中になっているブロックされていないシグナルが存在する場合,これらのシグナルのうちの少なくとも 1 つが, sigprocmask関数が返る前に配信されます。
sigprocmask関数では SIGKILL シグナルや SIGSTOP シグナルをブロックすることはできません。プログラムがこれらのシグナルの 1 つをブロックしようと試みた場合でも, sigprocmask関数はエラーを発生させません。
次の例は,SIGINT シグナルのみの配信をブロックするシグナル・マスクを設定する方法を示しています。
#include <signal.h> int return_value; sigset_t newset; . . . sigemptyset(&newset); sigaddset(&newset, SIGINT); return_value = sigprocmask (SIG_SETMASK, &newset, NULL);
0 成功を示します。 -1 エラーを示します。プロセスのシグナル・マスクは変更されず, errno は以下のいずれかの値に設定されます。
- EINVAL--- how 引数の値が,どの定義済みの値とも等しくない。
- EFAULT--- set または o_set 引数は,プロセスの割り当てられたアドレス空間の外の位置をポイントしている。
目次 | 索引 |
|