sigset - ライブラリコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 返り値
- エラー
- 注意
- バグ
- 準拠
- 関連項目
名前
sigset, sighold, sigrelse, sigignore - System V 版シグナル API
書式
#define _XOPEN_SOURCE 500
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t sigset(int
sig
, sighandler_t
disp
);
int sighold(int
sig
);
int sigrelse(int
sig
);
int sigignore(int
sig
);
説明
これらの関数は、昔ながらの System V 版シグナル API を使用しているプログラム
に対して互換性のあるインタフェースを glibc で提供するものである。
この API は過去のものであり、新しいアプリケーションでは
POSIX シグナル API
(
sigaction
(2),
sigprocmask
(2) など) を使用すべきである。
関数
sigset
()はシグナル
sig
のシグナルハンドラの動作を変更する。
disp
引き数には、シグナルハンドラ関数のアドレスか、
以下の定数のいずれか一つを指定できる。
-
SIG_DFL
-
sig
の動作をデフォルトにリセットする。
-
SIG_IGN
-
sig
を無視する。
-
SIG_HOLD
-
そのプロセスのシグナルマスクに
sig
を追加するが、
sig
の動作は変更しない。
disp
にシグナルハンドラのアドレスが指定された場合、
シグナルハンドラの実行中は、そのプロセスのシグナルマスクに
sig
が追加される。
disp
に
SIG_HOLD
以外の値が指定された場合、
そのプロセスのシグナルマスクから
sig
が削除される。
シグナル
SIGKILL
と
SIGSTOP
に対する動作は変更できない。
関数
sighold
()は、呼び出し元プロセスのシグナルマスクに
sig
を追加する。
関数
sigrelse
()は、呼び出し元プロセスのシグナルマスクから
sig
を削除する。
関数
sigignore
()は、
sig
の動作を
SIG_IGN
に設定する。
返り値
sigset
()は成功すると、
呼び出し前に
sig
がブロックされていた場合には
SIG_HOLD
を返し、
ブロックされていなかった場合には
変更前のそのシグナルの動作を返す。
エラーの場合、
sigset
()は -1 を返し、
errno
にエラーを示す値をセットする。
関数
sighold
(),
sigrelse
(),
sigignore
()は成功すると 0 を返す。エラーの場合、-1 を返し、
errno
にエラーを示す値をセットする。
エラー
注意
これらの関数は glibc 2.1 で登場した。
sighandler_t
型は GNU による拡張であり、この man page で
sigset
()のプロトタイプをより読みやすくするために使われているだけである。
関数
sigset
()は信頼性のあるシグナル処理機構を提供する
(
sa_mask
を 0 で
sigaction
()を呼び出したときと同様)。
System V では、関数
signal
()が提供する処理機構は信頼性のないものである
(
sa_mask
を
SA_RESETHAND | SA_NODEFER
として
sigaction
()を呼び出したときと同様)。
BSD では、
signal
()は信頼性のある処理機構を提供する。
POSIX.1-2001 では、
signal
()のこの点は規定しないままとなっている。
さらなる詳細については
signal
(2) を参照。
BSD と System V のどちらのシステムでも
シグナルを待つために、
sigpause
()という名前の関数が提供されているが、
この関数の引き数は両方のシステムで異なる。
詳細は
sigpause
(3) を参照。
バグ
2.2 より前のバージョンの glibc では、
disp
に
SIG_HOLD
以外の値が指定された場合、
sig
のブロック解除を行っていなかった。
2.3.5 以前の全てのバージョンの glibc では、
sigset
()が変更前のシグナルの動作を正しく返さない場合が 2つある。
一つめは、
disp
に
SIG_HOLD
が指定されると、成功した場合
sigset
()は常に
SIG_HOLD
を返すことである。
正しくは、(シグナルがブロックされていなかった場合には)
変更前のシグナルの動作を返すべきである
(シグナルがブロックされていた場合には、
SIG_HOLD
が返される)。
もう一つは、シグナルが現在ブロックされている場合には、
成功した場合の
sigset
()の返り値は
SIG_HOLD
になるべきであるが、実際には
変更前のシグナルの動作が返されることである。
準拠
SVr4, POSIX.1-2001.
これらの関数は廃止予定である。新しいプログラムでは使用しないこと。
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする