library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


OpenVMS

OpenVMS
HP C ランタイム・ライブラリ・
リファレンス・マニュアル (下巻)


前へ 次へ 目次 索引



sigignore (Alpha, I64)

指定されたシグナルの処理方法として,SIG_IGN を設定します。

形式

#include <signal.h>

int sigignore (int signal);


引数

signal

SIG_IGN を設定するシグナル。 signal 引数には,SIGKILL と SIGSTOP を除き, <signal.h>ヘッダ・ファイルで定義されている任意のシグナルを指定できます。

説明

sigholdsigrelse,および sigignore関数では,簡易なシグナル管理を行うことができます。

sighold関数を sigrelseおよび sigpauseと合わせて使用すると,コードのクリティカル・セクションでシグナルの配信を一時的に保留させることができます。

成功すると, sigignore関数は値 0 を返します。失敗すると,値 - 1 を返し,エラーを示す値を errnoに設定します。

注意

これらのインタフェースは,互換性のためにのみ用意されています。新しいプログラムでは, sigactionsigprocmaskを使用してシグナルの処理方法を制御してください。


戻り値

0 成功を示します。
- 1 エラーを示します。 errno には,次の値が設定されます。

  • EINVAL -- signal 引数の値が不正なシグナル番号,または SIGKILL です。または,キャッチできないシグナルをキャッチしようとしたか,無視できないシグナルを無視しようとしました。


sigismember

指定されたシグナルがシグナル・セットのメンバであるかどうかをテストします。

形式

#include <signal.h>

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


引数

set

シグナル・セット。

sig_number

個々のシグナル。

説明

sigismember関数は,sig_number が, set がポイントするシグナル・セットのメンバであるかどうかをテストします。

この関数は,アプリケーションからアドレス指定できるデータ・オブジェクトに作用するものであり,システムが把握している任意のシグナルのセットに適用できるわけではありません。たとえば,この関数は,プロセスへの配信がブロックされているセットや,プロセスに対して保留中となっているセットには適用できません。


戻り値

1 成功を示します。指定されたシグナルは,指定されたセットのメンバです。
0 エラーを示します。指定されたシグナルは,指定されたセットのメンバではありません。


siglongjmp

シグナル処理による非ローカル goto。

形式

#include <setjmp.h>

void siglongjmp (sigjmp_buf env, int value);


引数

env

sigjmp_buf構造体のアドレス。

value

ゼロ以外の値。

説明

siglongjmp関数は,同じプロセス内で,対応する sigjmp_buf引数を使って行われた直前の sigsetjmp呼び出しによって保存された環境を復元します。

すべてのアクセス可能なオブジェクトは, siglongjmpの呼び出し時に値を持ちます。唯一の例外として, sigsetjmp呼び出しと siglongjmp呼び出しの間に変更された自動記憶時間のオブジェクトの値は不定です。

siglongjmpは通常の関数呼び出しとリターン・メカニズムをバイパスするので,割り込み,シグナル,およびそれらの関連する関数の実行中も正しく動作します。ただし, siglongjmpをネストしたシグナル・ハンドラ (たとえば,別のシグナルの処理中に生成したシグナルの結果として呼び出された関数) から呼び出した場合の動作は未定義です。

siglongjmp関数は,ゼロ以外の savemask 引数で sigsetjmpを呼び出して env 引数を初期化した場合にのみ,保存されていたシグナル・マスクを復元します。

siglongjmpの完了後,プログラムは,対応する sigsetjmpの呼び出しが value によって指定された値で返ったかのように実行を続けます。 siglongjmp関数は, sigsetjmpに 0 (ゼロ) を返させることはできません。 value が 0 ならば, sigsetjmpは 1 を返します。

sigsetjmpも参照してください。


sigmask

指定されたシグナル番号のためのマスクを作成します。

形式

#include <signal.h>

int sigmask (signum);


引数

signum

マスクを作成するシグナル番号。

説明

sigmask関数は,指定された signum のためのマスクを作成するために使用されます。このマスクは, sigblock関数で使用することができます。

戻り値

x signum のために作成されたマスク。


signal

シグナル sig の処理方法を指定することができます。シグナルのデフォルト処理を使用するか,シグナルを無視するか,または指定されたアドレスのシグナル・ハンドラを呼び出すことができます。

形式

#include <signal.h>

void (*signal (int sig, void (*func) (int))) (int);


引数

sig

シグナルに関連付けられた番号またはニーモニック。この引数は,通常は <signal.h>ヘッダ・ファイルに定義されているニーモニックの 1 つです。

func

シグナルが生成されたときに実行するアクション,またはシグナルの処理に必要な関数のアドレス。

説明

func が定数 SIG_DFL だった場合,指定されたシグナルに対するアクションはデフォルトのアクション,すなわち受信側プロセスの終了に再設定されます。引数が SIG_IGN だった場合には,シグナルは無視されます。すべてのシグナルを無視できるわけではありません。

func が SIG_DFL でも SIG_IGN でもない場合,この func はシグナル処理関数のアドレスを指定します。シグナルが生成されると,アドレスが指定された関数が, sig を引数として指定して呼び出されます。アドレスが指定された関数が返ると,割り込まれたプロセスは,割り込みのポイントから実行を続けます ( これはシグナルのキャッチと呼ばれます。シグナルは,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4 章に示した例外のケースを除き,キャッチ後は SIG_DFL に再設定されます)。

signal関数は,シグナルをキャッチしようとするたびに呼び出す必要があります。

シグナル処理の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4.2 節を参照してください。

OpenVMS 例外またはシグナルで UNIX スタイルのシグナルを生成させるためには, OpenVMS 条件ハンドラは,自分で処理する気がない例外を受信したときに SS$_RESIGNAL を返さなくてはなりません。 SS$_CONTINUE を返すと,UNIX スタイル・シグナルは正しく生成されません。 UNIX シグナルに対応する OpenVMS 例外のリストについては,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4 章を参照してください。


戻り値

x 以前にシグナルを処理するように設定された関数のアドレス。
SIG_ERR sig 引数が範囲外であることを示します。


sigpause

現在のマスクされたシグナルのセットに mask を割り当て,シグナルを待ちます。

形式

#include <signal.h>

int sigpause (int mask);


引数

mask

ブロックするシグナル。

説明

mask 引数の詳細については, sigblock関数を参照してください。

制御が sigpauseに戻ると,関数は以前のマスクされたシグナルのセットを復元し, errnoを EINTR に設定し,割り込みがあったことを示すために - 1 を返します。値 EINTR は <errno.h>ヘッダ・ファイルに定義されています。


戻り値

- 1 割り込みを示します。 errno は EINTR に設定されます。


sigpending

保留中のシグナルを確認します。

形式

#include <signal.h>

int sigpending (sigset_t *set);


引数

set

sigset_t構造体へのポインタ。

説明

sigpending関数は,配信がブロックされ,呼び出し元プロセスに対して保留中になっているシグナルのセットを, set 引数がポイントする位置に格納します。

sigset_t型のオブジェクトを他の用途に使用するためには,この型のオブジェクトに対して sigemptysetまたは sigfillsetの呼び出しを少なくとも 1 回は行わなくてはなりません。この方法でオブジェクトを初期化せずに, sigpending関数への引数を指定した場合の結果は未定義です。

sigemptysetsigfillsetも参照してください。


戻り値

0 成功を示します。
- 1 エラーを示します。 errno は次の値に設定されます。

  • SIGSEGV---不正なマスク引数。


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 引数の値に応じて,次の意味を持ちます。

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 引数は,プロセスの割り当てられたアドレス空間の外の位置をポイントしている。


sigrelse (Alpha, I64)

呼び出し元プロセスのシグナル・マスクから,指定されたシグナルを削除します。

形式

#include <signal.h>

int sigrelse (int signal);


引数

signal

シグナル・マスクから削除するシグナル。 signal 引数には,SIGKILL と SIGSTOP を除き, <signal.h>ヘッダ・ファイルで定義されている任意のシグナルを指定できます。

説明

sigholdsigrelse,および sigignore関数では,簡易なシグナル管理を行うことができます。

sighold関数を sigrelseおよび sigpauseと合わせて使用すると,コードのクリティカル・セクションでシグナルの配信を一時的に保留させることができます。

成功すると, sigrelse関数は値 0 を返します。失敗すると,値 - 1 を返し,エラーを示す値を errnoに設定します。

注意

これらのインタフェースは,互換性のためにのみ用意されています。新しいプログラムでは, sigactionsigprocmaskを使用してシグナルの処理方法を制御してください。


戻り値

0 成功を示します。
- 1 エラーを示します。 errno には,次の値が設定されます。

  • EINVAL -- signal 引数の値が不正なシグナル番号,または SIGKILL です。


sigsetjmp

非ローカル goto のジャンプ・ポイントを設定します。

形式

#include <setjmp.h>

init sigsetjmp (sigjmp_buf env, int savemask);


引数

env

sigjmp_buf構造体のアドレス。

savemask

現在のシグナル・マスクを保存する必要があるかどうかを指定する整数値。

説明

sigsetjmp関数は,呼び出し元環境を,後に siglongjmp関数で使用できるように env 引数に保存します。

savemask の値が 0 (ゼロ) でない場合, sigsetjmpはプロセスの現在のシグナル・マスクも,呼び出し元環境の一部として保存します。

siglongjmpも参照してください。


制限事項

OpenVMS 条件ハンドラから longjmp関数を呼び出すことはできません。ただし,以下のネスト制約の範囲内で, HP C RTL がサポートしている任意のシグナルに対して確立されたシグナル・ハンドラから longjmpを呼び出すことができます。


戻り値

0 成功を示します。
ゼロ以外 siglongjmp 関数の呼び出しが行われます。


前へ 次へ 目次 索引