Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       sigvec, sigblock, sigsetmask, siggetmask, sigmask - BSD 版シグナル API

書式

       #include <signal.h>

       int sigvec(int sig, const struct sigvec *vec, struct sigvec *ovec);

       int sigmask(int signum);

       int sigblock(int mask);

       int sigsetmask(int mask);

       int siggetmask(void);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       All functions shown above:
           Since glibc 2.19:
               _DEFAULT_SOURCE
           Glibc 2.19 and earlier:
               _BSD_SOURCE

説明

       これらの関数は、昔ながらの  BSD 版シグナル API を使用しているプログラム に対して互換性のあ
       るインターフェースを glibc で提供するものである。 この API  は過去のものであり、新しいアプ
       リケーションでは  POSIX シグナル API (sigaction(2), sigprocmask(2)  など) を使用すべきであ
       る。

       関数 sigvec()  は、(POSIX の sigaction(2)  と同様に) シグナル  sig  の動作の設定・取得を行
       う。  vec は、NULL 以外の場合、 sig の新しい動作を定義した sigvec 構造体へのポインターであ
       る。 ovec は、NULL 以外の場合、 sig の変更前の動作を返すために使用される sigvec 構造体への
       ポインターである。 sig の動作を変更せずに現在の動作を取得するためには、 vec に NULL を指定
       し、 ovec に NULL でないポインターを指定すればよい。

       シグナル SIGKILLSIGSTOP に対する動作は変更できない。

       sigvec 構造体は以下の通りである:

           struct sigvec {
               void (*sv_handler)(int); /* Signal disposition */
               int    sv_mask;          /* Signals to be blocked in handler */
               int    sv_flags;         /* Flags */
           };

       sv_handler  フィールドはシグナルの動作を指定するもので、  シグナルハンドラー関数のアドレス
       か、  SIG_DFLSIG_IGN のいずれかを指定できる。 SIG_DFL はシグナルに適用されるデフォルト
       の動作を意味し、 SIG_IGN はシグナルを無視することを意味する。

       sv_handler にシグナルハンドラーのアドレスを指定した場合、 sv_mask はハンドラーが実行中にブ
       ロックされるべきシグナルのマスクを指定する。    また、ハンドラーを起動したシグナル自身はブ
       ロックされる。 SIGKILLSIGSTOP をブロックしようとした場合には、黙って無視される。

       sv_handler にシグナルハンドラーのアドレスを指定した場合、 sv_flags  フィールドはハンドラー
       が呼ばれた際の挙動を制御するフラグを指定する。   このフィールドには、0  か、以下のフラグを
       1個以上指定できる:

       SV_INTERRUPT
              シグナルハンドラーが停止中のシステムコールを中断した場合、   ハンドラーから復帰して
              も、システムコールは再開されず、 エラー EINTR で失敗する。 このフラグを指定しなかっ
              た場合、システムコールは デフォルトで再開される。

       SV_RESETHAND
              シグナルハンドラーを呼び出す前にシグナルの動作を デフォルトにリセットする。  このフ
              ラグを指定しなかった場合、もう一度  sigvec() を呼び出して明示的に削除されるか、プロ
              セスが execve(2)  を実行するまで、ハンドラーは設定されたままとなる。

       SV_ONSTACK
              代替シグナルスタック上でシグナルハンドラーを実行する (歴史的に、BSD  では代替シグナ
              ルスタックは廃止された関数    sigstack()   を使って設定する。POSIX   では、代わりに
              sigaltstack(2)  を使用する)。

       マクロ sigmask()  は signum に対する「シグナルマスク」を構成して返す。  例えば、以下のよう
       なコードを使うと、 sigvec()  に渡す vec.sv_mask を初期化できる。

           vec.sv_mask = sigmask(SIGQUIT) | sigmask(SIGABRT);
                       /* Block SIGQUIT and SIGABRT during
                          handler execution */

       sigblock()    関数は、  mask  にあるシグナルをプロセスのシグナルマスクに追加し  (POSIX  の
       sigprocmask(SIG_BLOCK)   と同様)、変更前のプロセスのシグナルマスクを返す。   SIGKILLSIGSTOP をブロックしようとした場合には、黙って無視される。

       sigsetmask()    関数はプロセスのシグナルマスクを  mask  で指定された値に設定し  (POSIX  の
       sigprocmask(SIG_SETMASK) と同様)、変更前のプロセスのシグナルマスクを返す。

       siggetmask()  関数はプロセスの現在のシグナルマスクを返す。この関数は sigblock(0)  と等価で
       ある。

返り値

       sigvec()   関数は成功すると  0  を返す。エラーの場合、-1 を返し、 errno にエラーを示す値を
       セットする。

       sigblock()  と sigsetmask()  は変更前のシグナルマスクを返す。

       sigmask() マクロは signum のシグナルマスクを返す。

エラー

       sigaction(2)  と sigprocmask(2)  の「エラー」の節を参照。

バージョン

       バージョン 2.21 以降では、 GNU C ライブラリはもはや sigvec() 関数を ABI の一部として公開し
       なくなった。  (後方互換性を保証するために、glibc のシンボルのバージョン付け機構により、 古
       いバージョンのライブラリとリンクされたバイナリに対してはこのインターフェースが引き続き公開
       されている。)

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌─────────────────────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├─────────────────────────────────┼───────────────┼─────────┤
       │sigvec(), sigmask(), sigblock(), │ Thread safety │ MT-Safe │
       │sigsetmask(), siggetmask()       │               │         │
       └─────────────────────────────────┴───────────────┴─────────┘

準拠

       これらの関数のうち siggetmask()  以外の全ては 4.3BSD にあった。 siggetmask()  の出自ははっ
       きりしない。 これらの関数は廃止予定であり、新しいプログラムでは使用しないこと。

注意

       4.3BSD では、信頼性のあるシグナル処理機構を提供する (vec.sv_mask を 0 で sigvec() を呼び出
       したときと同様)。 System  V  が提供する処理機構は信頼性のないものである。  POSIX.1  では、
       signal() のこの点は規定しないままとなっている。 さらなる詳細については signal(2)  を参照。

       BSD  と System V のどちらのシステムでも シグナルを待つために、 sigpause(3)  という名前の関
       数が提供されているが、 この関数の引数は両方のシステムで異なる。 詳細は  sigpause(3)   を参
       照。

関連項目

       kill(2),   pause(2),   sigaction(2),  signal(2),  sigprocmask(2),  raise(3),  sigpause(3),
       sigset(3), signal(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。