wrong_return.c

来自「LINUX C编程实战这本书附带光盘的原代码」· C语言 代码 · 共 46 行

C
46
字号
#include <stdio.h>
#include <setjmp.h>
#include <signal.h>

jmp_buf	env;	 // 保存待跳转位置的栈信息

/*信号SIGRTMIN+15的处理函数*/
void handler_sigrtmin15(int signo)
{
	printf("recv SIGRTMIN+15\n");
	longjmp(env, 1);	// 返回到env处,注意第二个参数的值
}

/*信号SIGRTMAX-15的处理函数*/
void handler_sigrtmax15(int signo)
{
	printf("recv SIGRTMAX-15\n");
	longjmp(env, 2);	// 返回到env处,注意第二个参数的值
}

int main()
{
	/*设置返回点*/
	switch (setjmp(env)) {
		case 0:
			break;
		case 1:
			printf("return from SIGRTMIN+15\n");
			break;
		case 2:
			printf("return from SIGRTMAX-15\n");
			break;
		default:
			break;
	}

	/*捕捉信号,安装信号处理函数*/
	signal(SIGRTMIN+15, handler_sigrtmin15);
	signal(SIGRTMAX-15, handler_sigrtmax15);

	while (1)
		;

	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?