日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル >  V8.3ライブラリ

OpenVMS マニュアル


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


前へ 次へ 目次 索引





shm_unlink (Alpha, I64)

共用メモリ・オブジェクトを削除します。



形式

#include <sys/mman.h>

int shm_unlink (const char *name);




引数



name

削除する共用メモリ・オブジェクトの名前を示す文字列へのポインタ。



説明

shm_unlink関数は, name (の指す文字列) で指定した共用メモリ・オブジェクトについて,その名前を削除します。

ただし shm_unlinkの処理では,共用メモリ・オブジェクトをアンリンクするときにそのオブジェクトの参照元が 1 個以上存在していると,その名前を削除しただけで,呼び出し元へ戻ります。メモリ・オブジェクトの内容は,その時には削除されません。メモリ・オブジェクトの内容が削除されるのは,その共用メモリ・オブジェクトに対して,オープンされている参照とマッピングされている参照がすべて削除された後です。

共用メモリ・オブジェクトは,最後の shm_unlinkが実行された後でも存在し続けることがあるかもしれません。しかし,そのような場合に shm_unlinkでその名前を指定して再使用しようとしても,その名前の共用メモリ・オブジェクトが存在していないかのように処理されるだけです。つまり, shm_openは,O_CREAT を設定しないで呼び出すと失敗し, O_CREAT を設定して呼び出すと,新しい共用メモリ・オブジェクトが作成されます。




戻り値

0 成功したことを示します。
-1    失敗したことを示します。指定した共用メモリ・オブジェクトは変更されていません。 errno に,エラーを示す次のいずれかの値が設定されます。

  • EACCES ---指定した共用メモリ・オブジェクトをアンリンクするための許可が認められませんでした。

  • ENAMETOOLONG --- name 引数の長さが PATH_MAX を超えているか,パス名に長さが NAME_MAX を超えているコンポーネントが存在しています。

  • ENOENT ---指定した共用メモリ・オブジェクトが存在していません。




sigaction

シグナルが配信されたときに実行するアクションを指定します。



形式

#include <signal.h>

int sigaction (int sig, const struct sigaction *action, struct sigaction *o_action);




引数



sig

アクションに対応するシグナル。

action

sig 引数によって指定されたシグナルの受信時に実行されるアクションを記述する sigaction構造体へのポインタ。

o_action

sigaction構造体へのポインタ。 sigaction関数が呼び出しから返ると,以前に指定されたシグナルにアタッチされていたアクションは,この構造体に格納されます。



説明

プロセスは, sigaction関数によって,指定されたシグナルが配信されたときに実行されるアクションの確認と指定の両方を行うことができます。引数は, sigaction関数の動作を次のように決定します。

  • sig 引数の指定は,影響を受けるシグナルを識別する。 <signal.h>ヘッダ・ファイルに定義されている, SIGKILL 以外の任意のシグナル値を使用することができる。
    sig が SIGCHLD で,SA_NOCLDSTOP フラグが sa_flagsに設定されていない場合には,子プロセスが停止するたびに,呼び出し元プロセスに対して SIGCHLD シグナルが生成される。 sig が SIGCHLD で,SA_NOCLDSTOP フラグが sa_flagsに設定されている場合には, SIGCHLD シグナルはこのような形では生成されない。

  • action 引数の指定は,null でなければ,シグナルの受信時に実行されるアクションを定義する sigaction構造体をポイントする。 action 引数が null ならば,シグナル処理は変更されないので,この呼び出しを使ってシグナルの現在の処理に関する問い合わせを行うことができる。

  • o_action 引数の指定は,null でなければ,指定されたシグナルに以前にアタッチされていたアクションを含んでいる sigaction構造体をポイントする。

sigaction構造体は以下のメンバから構成されています。


  void        (*sa_handler)(int); 
  sigset_t    sa_mask; 
  int         sa_flags; 

sigaction構造体のメンバは,以下のように定義されています。

sa_handler このメンバは,以下の値を含むことができます。

  • SIG_DFL---シグナルの配信時に実行されるデフォルト・アクションを指定する。

  • SIG_IGN---シグナルが受信側プロセスに対して何の効果も持たないことを指定する。

  • 関数ポインタ---シグナルをキャッチするよう要求する。シグナルは関数呼び出しを引き起こす。

sa_mask このメンバは, sa_handler メンバが指定するシグナル・ハンドラ関数の実行中に,プロセス・シグナル・マスクに含まれるシグナルに加えて,個々のシグナルの配信をブロックするように要求することができます。
sa_flags このメンバは,シグナルの配信時に実行されるアクションをさらに細かく制御するフラグを設定することができます。

sigaction構造体の sa_flagsメンバは,以下の値を持ちます。

SA_ONSTACK このビットを設定すると,システムは, sigstack 関数によって指定されたシグナル・スタック上でシグナル・キャッチ関数を実行します。このビットが設定されていなければ,関数はシグナルの配信先のプロセスのスタック上で実行されます。
SA_RESETHAND このビットを設定すると,シグナルは SIG_DFL に再設定されます。 SIGILL と SIGTRAP は自動的には再設定できないことに注意してください。
SA_NODEFER このビットを設定すると,キャッチされたシグナルは自動的にブロックされません。
SA_NOCLDSTOP このビットが設定されており, sig 引数が SIGCHLD に等しいときに,呼び出し元プロセスの子プロセスが停止した場合,SIGCHLD シグナルは,SIGCHLD で SA_NOCLDSTOP が設定されていない場合にのみ呼び出し元プロセスに送信されます。

sigactionによってインストールされたシグナル・キャッチ関数によってシグナルがキャッチされると,新しいシグナル・マスクが計算され,そのシグナル・キャッチ関数の実行中は (または sigprocmaskあるいは sigsuspendが呼び出されるまでは) そのシグナル・マスクがインストールされます。このマスクは,現在のシグナル・マスクと, SA_NODEFER または SA_RESETHAND が設定されていなければ,配信されるシグナルの sa_maskの値のユニオンを計算し,さらに配信されるシグナルを加えることによって作成されます。ユーザのシグナル・ハンドラが正常に返った時点で,元のシグナル・マスクが復元されます。

いったん特定のシグナルに対するアクションがインストールされると,そのアクションは別のアクションが ( sigactionの再度の呼び出しによって ) 明示的に要求されるまで, SA_RESETHAND フラグがハンドラの再設定を引き起こすまで,またはいずれかの exec関数が呼び出されるまでインストールされたままとなります。

指定されたシグナルの以前のアクションが signalによって設定されていた場合, sigactiono_action 引数がポイントする構造体に返されるフィールドの値は定められておらず,特に,o_action-> sa_handlerは必ずしも signalに渡された値と一致しません。ただし,同じ構造体へのポインタ,またはそのコピーが, sigactionaction 引数によってそれ以降の sigactionの呼び出しに渡された場合,シグナルは元の signal呼び出しが繰り返されたかのように処理されます。

sigactionが実行に失敗した場合には,新しいシグナル・ハンドラはインストールされません。

キャッチすることも,無視することもできないシグナルに対するアクションを SIG_DFL に設定しようとしたときに,その試みが無視されるか, errnoが EINVAL に設定されてエラーが返されるかどうかは定められていません。

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

注意

sigvecおよび signal関数は,古い UNIX システムとの互換性のために用意されています。これらの関数の機能は, sigaction関数の機能のサブセットです。

sigstacksigvecsignalwaitread,および writeも参照してください。




戻り値

0 成功を示します。
-1    エラーを示します。新しいシグナル・ハンドラはインストールされません。 errno は以下のいずれかの値に設定されます。

  • EFAULT--- action または o_action 引数は,プロセスの割り当てられたアドレス空間の外の位置をポイントしている。

  • EINVAL--- sig 引数は有効なシグナル番号ではない。または,SIGKILL,SIGSTOP,および SIGCONT シグナルの無視,あるいはこれらのシグナルのハンドラの指定が試みられた。




sigaddset

指定された個々のシグナルを追加します。



形式

#include <signal.h>

int sigaddset (sigset_t *set, int sig_number);




引数



set

シグナル・セット。

sig_number

個々のシグナル。



説明

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

sigaddset関数は,sig_number で指定される個々のシグナルを set によって指定されたシグナル・セットから追加します。




次の例は,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 -- sig_number の値が有効なシグナル番号でない。




sigblock

配信がブロックされるシグナルの現在のセットに, mask に含まれているシグナルを追加します。



形式

#include <signal.h>

int sigblock (int mask);




引数



mask

ブロックするシグナル。



説明

シグナル i は,mask 内の i - 1 ビットが 1 である場合にブロックされます。たとえば,ブロックされるシグナルのセットに保護違反シグナルを追加するには,次の行を使用します。


sigblock(1 << (SIGBUS - 1)); 

シグナルは,ニーモニックで (保護違反の場合は SIGBUS),または <signal.h>ヘッダ・ファイルに定義されている番号で表現することができ,ビット論理和演算子 (|) を使って複数のシグナルの組み合わせを表現することができます。




戻り値

x 以前のマスクされたシグナルのセットを示します。




sigdelset

指定された個々のシグナルを削除します。



形式

#include <signal.h>

int sigdelset (sigset_t *set, int sig_number;)




引数



set

シグナル・セット。

sig_number

個々のシグナル。



説明

sigdelset関数は, set によって指定されたシグナル・セットから, sig_number で指定される個々のシグナルを削除します。

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




戻り値

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

  • EINVAL--- sig_number の値が有効なシグナル番号でない。




sigemptyset

シグナル・セットを初期化して,すべてのシグナルを除外します。



形式

#include <signal.h>

int sigemptyset (sigset_t *set);




引数



set

シグナル・セット。



説明

sigemptyset関数は, set がポイントするシグナル・セットを初期化して,すべてのシグナルを除外します。 sigset_t型のオブジェクトを他の用途に使用するためには,この型のオブジェクトに対して sigemptysetまたは sigfillset関数の呼び出しを少なくとも 1 回は行わなくてはなりません。

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

sigfillsetも参照してください。




次の例は,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 が,エラーを示す値に設定されます。




sigfillset

シグナル・セットを初期化して,すべてのシグナルを含めます。



形式

#include <signal.h>

int sigfillset (sigset_t *set);




引数



set

シグナル・セット。



説明

sigfillset関数は, set がポイントするシグナル・セットを初期化して,すべてのシグナルを含めます。 sigset_t型のオブジェクトを他の用途に使用するためには,この型のオブジェクトに対して sigemptysetまたは sigfillsetの呼び出しを少なくとも 1 回は行わなくてはなりません。

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

sigemptysetも参照してください。




戻り値

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

  • EINVAL -- sig_number 引数の値が有効なシグナル番号でない。


前へ 次へ 目次 索引



         印刷用画面へ

プライバシー 本サイト利用時の合意事項