sigismember() - シグナルがシグナル・マスク内にあるかどうかのテスト

標準

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

POSIX.1
XPG4
XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#define _POSIX_SOURCE
#include <signal.h>

int sigismember(const sigset_t *set, int signal);

機能説明

指定シグナル番号 signal が、シグナル・セット set のメンバーであるかどうかを テストします。

sigismember() は、シグナル・セットを操作する関数のファミリーの 一部です。 シグナル・セット とは、シグナル・グループを 1 つのプロセスにより経過の記録を取るためのデータ・オブジェクトです。例えば、プロセスにより、ブロック化しているシグナルを 記録する 1 つのシグナル・セット、および保留中のシグナル を記録する別のシグナル・セットを作成できます。シグナル・セットは、その他の関数 (sigprocmask() など) で使用される シグナルのグループを操作するか、またはその他の 関数 (sigpending() など) で戻されるシグナル・セットを検査する ために使用されます。

アプリケーションは、sigemptyset() または sigfillset() のどちらかを、 sigset_t 型のオブジェクトが他に使用される前に、各オブジェクトに対して少なくとも 1 回は 呼び出すべきです。そのようなオブジェクトが、この方法で初期化されていないにもかかわらず、 引数として pthread_sigmask()、sigaction()、sigaddset()、sigdelset()、 sigismember()、sigpending()、sigprocmask()、sigsuspend()、sigtimedwait()、sigwait()、 または sigwaitinfo() のどれかに指定された場合、その結果は未定義です。

使用上の注意

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

戻り値

sigismember() は、signalset 中にある場合には、1 を戻し、ない場合には 0 を戻します。

正常に実行されなかった場合、sigismember() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EINVAL
signal の値は、サポートされていないシグナルです。

CELEBS19
⁄* CELEBS19

   This example tests signals.

 *⁄
#define _POSIX_SOURCE
#include <stdio.h>
#include <signal.h>

void check(sigset_t set, int signum, char *signame) {
  printf("%-8s is ", signame);
  if (!sigismember(&set, signum))
    printf("not ");
  puts("in the set");
}

main() {
  sigset_t sigset;

  sigemptyset(&sigset);
  sigaddset(&sigset, SIGUSR1);
  sigaddset(&sigset, SIGKILL);
  sigaddset(&sigset, SIGCHLD);

  check(sigset, SIGUSR1, "SIGUSR1");
  check(sigset, SIGUSR2, "SIGUSR2");
  check(sigset, SIGFPE,  "SIGFPE");
  check(sigset, SIGKILL, "SIGKILL");
}
出力:
SIGUSR1  is in the set
SIGUSR2  is not in the set
SIGFPE   is not in the set
SIGKILL  is in the set

関連情報