sigaltstack(2) FreeBSD 一般コマンドマニュアル

sigaltstack

前のページ 上に戻る 次のページ

sigaltstack




書式

     #include <signal.h>
     struct sigaltstack {
             char    *ss_sp;
             size_t  ss_size;
             int     ss_flags;
     };

     int
     sigaltstack(const struct sigaltstack *ss, struct sigaltstack *oss);


解説

     sigaltstack() を使用することにより、ユーザはシグナルを処理する別のスタッ
     クを定義できます。 ss が 0 でない場合、シグナルを配信する シグナルスタッ
     クへのポインタとサイズが指定され、プロセスがそのスタックで動作中であるか
     どうかがシステムに伝えられます。ハンドラがシグナルスタックで動作する必要
     があることをシグナルのアクションが示す場合 ( sigaction(2) 呼び出しで指定)
     、システムは、プロセスがそのスタックで動作中であるかどうかをチェックしま
     す。プロセスがシグナルスタックで動作していない場合、システムは、シグナル
     ハンドラの動作中はシグナルスタックを適切なものに切り替えます。

     SS_DISABLE が ss_flags で設定されていると、 ss_spss_size は無視されて
     シグナルスタックは無効になります。アクティブなスタックを無効にしようとす
     ると、 sigaltstack() は -1 を戻し errno を EINVAL に設定します。スタック
     が無効になると、すべてのシグナルは通常のユーザスタックで動作するようにな
     ります。スタックが後で有効にると、代替スタックで処理するように指定された
     すべてのシグナルは、その指定どおりに再開されます。

     oss を 0 以外にすると、現在のシグナルスタックの状態が戻されます。
     ss_flags フィールドの値は、プロセスが現在シグナルスタックにある場合は
     SS_ONSTACK に、シグナルスタックが現在無効である場合は SS_DISABLE になりま
     す。


     値 SIGSTKSZ は、代替スタック領域を割り当てる一般的なケースで使用するバイ
     ト数 / 文字数に定義されます。代替スタックの割り当てには、一般的に以下のよ
     うなコードが使用されます。

           if ((sigstk.ss_sp = malloc(SIGSTKSZ)) == NULL)
                   /* error return */
           sigstk.ss_size = SIGSTKSZ;
           sigstk.ss_flags = 0;
           if (sigaltstack(&sigstk,0) < 0)
                   perror("sigaltstack");
     デフォルトサイズ以外の特定量のスタックスペースを必要とするシグナルハンド
     ラを使用するプログラムでは、別の方法が使用できます。値 MINSIGSTKSZ は、代
     替スタックの実行にオペレーティングシステムが必要とするバイト数 / 文字数に
     定義されています。代替スタックのサイズを算出する場合は、プログラムでス
     タック要件に MINSIGSTKSZ を追加し、オペレーティングシステムのオーバーヘッ
     ドを許容する必要があります。

     [EFAULT]           ssoss が、プロセスアドレス空間の有効な部分でないメ
                        モリを指しています。

     [EINVAL]           アクティブなスタックを無効にしようとしました。

     [ENOMEM]           代替スタック領域のサイズが MINSIGSTKSZ 以下になってい
                        ます。


関連項目

     sigaction(2), setjmp(3)


歴史

     sigaltstack() の前バージョンである sigstack() システムコールは 4.2BSD で
     登場しました。

FreeBSD 4.4                       May 1, 1995                      FreeBSD 4.4

ABELNET VPSサービス