総合手引 | セクション 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.
“ | This philosophy, in the hands of amateurs, leads to inexplicably mind-numbing botches like the existence of two programs, “head” and “tail,” which print the first part or the last part of a file, depending. Even though their operations are duals of one another, “head” and “tail” are different programs, written by different authors, and take different options! | ” |
— The Unix Haters' handbook |