SIGRETURN(2)

名称
sigreturn - シグナルから戻る

ライブラリ
libc

書式
<signal.h>

    struct	sigcontext {
    	int	sc_onstack;		/* 復元するスタックステータス */
    	int	sc_mask;		/* 復元するシグナルマスク */
    	int	sc_esp;			/* マシンステート */
    	int	sc_ebp;
    	int	sc_isp;
    	int	sc_eip;
    	int	sc_efl;
    	int	sc_es;
    	int	sc_ds;
    	int	sc_cs;
    	int	sc_ss;
    	int	sc_edi;
    	int	sc_esi;
    	int	sc_ebx;
    	int	sc_edx;
    	int	sc_ecx;
    	int	sc_eax;
    #  define sc_sp sc_esp
    #  define sc_fp sc_ebp
    #  define sc_pc sc_eip
    #  define sc_ps sc_efl
    };

int sigreturn(struct sigcontext *scp)

解説
sigreturn() によって、マスクの細かい設定解除、スタックのスイッチ、 シグナルコンテキストからの復帰を行なえます。 プロセスのシグナルマスクとスタックステータスは、 コンテキストから復元されます。システムコールは戻りません。 ユーザのスタックポインタ、フレームポインタ、引数ポインタ、 プロセッサステータスロングワードは、コンテキストから復元されます。 実行は、指定された pc で再開されます。 このシステムコールは、前に実行していたプログラムに シグナルから戻る場合に、トランポリンコードと longjmp(3) で使用します。

注
このシステムコールは 4.2BSD では使用できないので、下位互換性が必要な場合は使用しないでください。

戻り値
処理が正常に完了すると、このシステムコールは戻りません。 そうでない場合は -1 が返され、エラーを示すために errno が設定されます

エラー
以下のうち 1 つが発生すると、 sigreturn() は処理を失敗し、プロセスコンテキストは変更されずに残ります。

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

[EINVAL]
    プロセスステータスロングワードが正しくないか、 プロセスの権限レベルを不適切に上げています。

関連項目
sigvec(2), setjmp(3)

歴史
sigreturn() 関数呼び出しは、 4.3BSD で登場しました。