.\" Copyright (c) 2005 by Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 2005 Akihiro MOTOKI all rights reserved. .\" Translated 2005-12-04, Akihiro MOTOKI .\" .TH SIGVEC 3 2020\-08\-13 Linux "Linux Programmer's Manual" .SH 名前 sigvec, sigblock, sigsetmask, siggetmask, sigmask \- BSD 版シグナル API .SH 書式 \fB#include \fP .PP \fBint sigvec(int \fP\fIsig\fP\fB, const struct sigvec *\fP\fIvec\fP\fB, struct sigvec *\fP\fIovec\fP\fB);\fP .PP \fBint sigmask(int \fP\fIsignum\fP\fB);\fP .PP \fBint sigblock(int \fP\fImask\fP\fB);\fP .PP \fBint sigsetmask(int \fP\fImask\fP\fB);\fP .PP \fBint siggetmask(void);\fP .PP .RS -4 glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): .RE .PP All functions shown above: Since glibc 2.19: _DEFAULT_SOURCE Glibc 2.19 and earlier: _BSD_SOURCE .SH 説明 これらの関数は、昔ながらの BSD 版シグナル API を使用しているプログラム に対して互換性のあるインターフェースを glibc で提供するものである。 この API は過去のものであり、新しいアプリケーションでは POSIX シグナル API (\fBsigaction\fP(2), \fBsigprocmask\fP(2) など) を使用すべきである。 .PP 関数 \fBsigvec\fP() は、(POSIX の \fBsigaction\fP(2) と同様に) シグナル \fIsig\fP の動作の設定・取得を行う。 \fIvec\fP は、NULL 以外の場合、 \fIsig\fP の新しい動作を定義した \fIsigvec\fP 構造体へのポインターである。 \fIovec\fP は、NULL 以外の場合、 \fIsig\fP の変更前の動作を返すために使用される \fIsigvec\fP 構造体へのポインターである。 \fIsig\fP の動作を変更せずに現在の動作を取得するためには、 \fIvec\fP に NULL を指定し、 \fIovec\fP に NULL でないポインターを指定すればよい。 .PP シグナル \fBSIGKILL\fP と \fBSIGSTOP\fP に対する動作は変更できない。 .PP \fIsigvec\fP 構造体は以下の通りである: .PP .in +4n .EX struct sigvec { void (*sv_handler)(int); /* Signal disposition */ int sv_mask; /* Signals to be blocked in handler */ int sv_flags; /* Flags */ }; .EE .in .PP \fIsv_handler\fP フィールドはシグナルの動作を指定するもので、 シグナルハンドラー関数のアドレスか、 \fBSIG_DFL\fP と \fBSIG_IGN\fP のいずれかを指定できる。 \fBSIG_DFL\fP はシグナルに適用されるデフォルトの動作を意味し、 \fBSIG_IGN\fP はシグナルを無視することを意味する。 .PP \fIsv_handler\fP にシグナルハンドラーのアドレスを指定した場合、 \fIsv_mask\fP はハンドラーが実行中にブロックされるべきシグナルのマスクを指定する。 また、ハンドラーを起動したシグナル自身はブロックされる。 \fBSIGKILL\fP か \fBSIGSTOP\fP をブロックしようとした場合には、黙って無視される。 .PP \fIsv_handler\fP にシグナルハンドラーのアドレスを指定した場合、 \fIsv_flags\fP フィールドはハンドラーが呼ばれた際の挙動を制御するフラグを指定する。 このフィールドには、0 か、以下のフラグを 1個以上指定できる: .TP \fBSV_INTERRUPT\fP シグナルハンドラーが停止中のシステムコールを中断した場合、 ハンドラーから復帰しても、システムコールは再開されず、 エラー \fBEINTR\fP で失敗する。 このフラグを指定しなかった場合、システムコールは デフォルトで再開される。 .TP \fBSV_RESETHAND\fP シグナルハンドラーを呼び出す前にシグナルの動作を デフォルトにリセットする。 このフラグを指定しなかった場合、もう一度 \fBsigvec\fP() を呼び出して明示的に削除されるか、プロセスが \fBexecve\fP(2) を実行するまで、ハンドラーは設定されたままとなる。 .TP \fBSV_ONSTACK\fP 代替シグナルスタック上でシグナルハンドラーを実行する (歴史的に、BSD では代替シグナルスタックは廃止された関数 \fBsigstack\fP() を使って設定する。POSIX では、代わりに \fBsigaltstack\fP(2) を使用する)。 .PP マクロ \fBsigmask\fP() は \fIsignum\fP に対する「シグナルマスク」を構成して返す。 例えば、以下のようなコードを使うと、 \fBsigvec\fP() に渡す \fIvec.sv_mask\fP を初期化できる。 .PP .in +4n .EX vec.sv_mask = sigmask(SIGQUIT) | sigmask(SIGABRT); /* Block SIGQUIT and SIGABRT during handler execution */ .EE .in .PP \fBsigblock\fP() 関数は、 \fImask\fP にあるシグナルをプロセスのシグナルマスクに追加し (POSIX の \fIsigprocmask(SIG_BLOCK)\fP と同様)、変更前のプロセスのシグナルマスクを返す。 \fBSIGKILL\fP や \fBSIGSTOP\fP をブロックしようとした場合には、黙って無視される。 .PP \fBsigsetmask\fP() 関数はプロセスのシグナルマスクを \fImask\fP で指定された値に設定し (POSIX の \fIsigprocmask(SIG_SETMASK)\fP と同様)、変更前のプロセスのシグナルマスクを返す。 .PP \fBsiggetmask\fP() 関数はプロセスの現在のシグナルマスクを返す。この関数は \fIsigblock(0)\fP と等価である。 .SH 返り値 \fBsigvec\fP() 関数は成功すると 0 を返す。エラーの場合、\-1 を返し、 \fIerrno\fP にエラーを示す値をセットする。 .PP \fBsigblock\fP() と \fBsigsetmask\fP() は変更前のシグナルマスクを返す。 .PP \fBsigmask\fP() マクロは \fIsignum\fP のシグナルマスクを返す。 .SH エラー \fBsigaction\fP(2) と \fBsigprocmask\fP(2) の「エラー」の節を参照。 .SH バージョン バージョン 2.21 以降では、 GNU C ライブラリはもはや \fBsigvec\fP() 関数を ABI の一部として公開しなくなった。 (後方互換性を保証するために、glibc のシンボルのバージョン付け機構により、 古いバージョンのライブラリとリンクされたバイナリに対してはこのインターフェースが引き続き公開されている。) .SH 属性 この節で使用されている用語の説明については、 \fBattributes\fP(7) を参照。 .TS allbox; lbw32 lb lb l l l. インターフェース 属性 値 T{ \fBsigvec\fP(), \fBsigmask\fP(), \fBsigblock\fP(), \fBsigsetmask\fP(), \fBsiggetmask\fP() T} Thread safety MT\-Safe .TE .SH 準拠 これらの関数のうち \fBsiggetmask\fP() 以外の全ては 4.3BSD にあった。 \fBsiggetmask\fP() の出自ははっきりしない。 これらの関数は廃止予定であり、新しいプログラムでは使用しないこと。 .SH 注意 4.3BSD では、信頼性のあるシグナル処理機構を提供する (\fIvec.sv_mask\fP を 0 で \fBsigvec\fP() を呼び出したときと同様)。 System V が提供する処理機構は信頼性のないものである。 POSIX.1 では、 \fBsignal\fP() のこの点は規定しないままとなっている。 さらなる詳細については \fBsignal\fP(2) を参照。 .PP BSD と System V のどちらのシステムでも シグナルを待つために、 \fBsigpause\fP(3) という名前の関数が提供されているが、 この関数の引数は両方のシステムで異なる。 詳細は \fBsigpause\fP(3) を参照。 .SH 関連項目 \fBkill\fP(2), \fBpause\fP(2), \fBsigaction\fP(2), \fBsignal\fP(2), \fBsigprocmask\fP(2), \fBraise\fP(3), \fBsigpause\fP(3), \fBsigset\fP(3), \fBsignal\fP(7) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は \%https://www.kernel.org/doc/man\-pages/ に書かれている。