zoukankan      html  css  js  c++  java
  • c信号处理程序以及setjmp函数longjmp函数的简单应用

    1.利用signal函数注册一个信号处理函数handler当收到相应的信号时,不终止程序而是给出友好的提示信息,这里对一个空指针赋值会产生一个segment violation错误

    被hanler函数捕捉后通过s的值得到相应的提示

    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    void handler(int s) {
      if(s == SIGBUS) printf("now got a bus error signal
    ");
      if(s == SIGSEGV) printf("now got a segmention violation signal
    ");
      if(s == SIGILL) printf("now got an illegal instruction signal
    ");
      exit(1);
    }
    
    int main() {
      int *p=NULL;
      signal(SIGBUS,handler);
      signal(SIGSEGV,handler);
      signal(SIGILL,handler);
      *p=0;
    }

    2.利用longjmp和setjmp实现接受一个信号后重启一个进程

    注册一个型号处理函数

    1.用setjmp函数保存当前执行时的上下文保存在buf中并返回0

    2.进入死循环

    3.给出一个SIGINT信号,longjmp函数执行恢复buf保存的上下文并返回一个数这里是1

    4.又回到了main函数并且if为真

    #include <setjmp.h>
    #include <signal.h>
    #include <stdio.h>
    
    jmp_buf buf;
    
    void handler(int s) {
      if(s == SIGINT) printf("now got a SIGINT signal
    ");
      longjmp(buf,1);
      /*没有到达*/
    }
    
    int main() {
      signal(SIGINT,handler);
      if(setjmp(buf)) {
        printf("back in main
    ");
        return 0;
      }else {
        printf("first time through
    ");
      }
      while(1);
    }
    Yosoro
  • 相关阅读:
    HTTP协议中几个状态码
    Memcache 使用方法
    mysql 时间设置
    Adobe After Effect CS6 下载 安装 破解 汉化
    skycons.js 基于canvas的天气动态图标小插件
    Adobe Creative Cloud Cleaner Tool 清除工具
    nodejs常用命令行
    js过滤特殊字符
    QuickTime 介绍 下载 安装(win7及以上版本)
    js 16进制转10进制
  • 原文地址:https://www.cnblogs.com/tclan126/p/8400301.html
Copyright © 2011-2022 走看看