Signal函数,set-longjmp的学习

Singal函数

学习文章:Linux Signal函数详解:原理、使用与最佳实践-CSDN博客

  • 函数原型

    signal()是Linux系统中最基本的信号处理函数,其原型为:

    1
    2
    3
    
    #include <signal.h>
    
    void (*signal(int signum, void (*handler)(int)))(int);
    
    • 参数1(signum):要处理的信号编号
    • 参数2(handler):信号处理函数指针
    • 返回值:之前的信号处理函数指针
  • 常见信号类型

​ SIGHUP 1 Term 终端挂起或控制进程终止 ​ SIGINT 2 Term 键盘中断(Ctrl+C) ​ SIGQUIT 3 Core 键盘退出(Ctrl+) ​ SIGILL 4 Core 非法指令 ​ SIGABRT 6 Core 来自abort函数的终止信号 ​ SIGFPE 8 Core 浮点异常 ​ SIGKILL 9 Term 强制终止(不可捕获或忽略) ​ SIGSEGV 11 Core 无效内存引用 ​ SIGPIPE 13 Term 管道破裂 ​ SIGALRM 14 Term 定时器信号 ​ SIGTERM 15 Term 终止信号

set-longjmp

学习文章C 语言中 setjmp 和 longjmp - hazir - 博客园

setjmp相当于锚点,longjmp相当于是触发锚点

  • setjmp(env);没从longjmp跳回的时候返回0,若跳回则返回longjmp,env的携带的值

  • longjmp(env,i)跳回setjmp并返回i

  • 使用:用set-longjmp实现循环

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    #include<stdio.h>
    #include<setjmp.h>
    #include<stdlib.h> 
    int main()
    {
    	jmp_buf env;
    	int i,n;
    	scanf("%d",&n);
    	i=setjmp(env);
    	if(i<=n)
    	{
    		printf("%d ",i);
    		longjmp(env,++i);
    	}
    	return 0; 
    }
    
使用 Hugo 构建
主题 StackJimmy 设计