総合手引 | セクション 3 | English | オプション |
#include <setjmp.h>
対応する longjmp() 関数は、それぞれ最も新しい setjmp() 関数呼び出しによって保存された環境を復元します。 longjmp() 関数はその後で復帰するので、対応する setjmp() 呼び出しが、0 ではなく val で指定された値を返したばかりであるかのように プログラムの実行が継続します。
呼び出しのペアはお互いに混合できます。すなわち、 sigsetjmp() と siglongjmp() および setjmp() と longjmp() の各組み合わせは、同じプログラム内で使用できます。 しかし、個々の呼び出しは混合することはできません。 たとえば、 setjmp() に渡される env 引数は siglongjmp() に渡すことはできません。
longjmp() ルーチンは、 setjmp() を呼び出したルーチンから復帰した後では 呼び出すことはできません。
アクセス可能なオブジェクトはすべて longjmp() ルーチンが呼び出された時点での値を持ちます。 ただし例外として、自動記憶域期間継続するオブジェクトであり、 volatile 型ではなく、かつ setjmp() 呼び出しと longjmp() 呼び出しとの間で変更されるものについて、 その値が不定になることは除きます。
setjmp()/longjmp() のペアはシグナルマスクを保存し復元しますが、 _setjmp()/_longjmp() のペアはレジスタセットとスタックしか保存および復元しません ( sigprocmask(2) を参照 ) 。
sigsetjmp()/siglongjmp() 関数のペアは、引数 savemask が 0 でない場合、シグナルマスクを保存および復元します。 0 である場合は、レジスタセットとスタックのみが保存されます。
SETJMP (3) | June 4, 1993 |
総合手引 | セクション 3 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | Like a classics radio station whose play list spans decades, Unix simultaneously exhibits its mixed and dated heritage. There's Clash-era graphics interfaces; Beatles-era two-letter command names; and systems programs (for example, ps) whose terse and obscure output was designed for slow teletypes; Bing Crosby-era command editing (# and @ are still the default line editing commands), and Scott Joplin-era core dumps. | ” |
— The Unix Haters' handbook |