[开发资料] 使用信号处理函数处理异常

[复制链接]
961|7
 楼主| LOVEEVER 发表于 2024-4-7 21:35 | 显示全部楼层 |阅读模式

使用信号处理函数:这是一种用于处理运行时异常的方法,就是在程序中注册一些信号处理函数,用于响应系统或用户发送的一些信号。信号是一种软件中断,用于通知进程发生了某些异常或事件。例如,当程序试图访问非法内存地址时,系统会发送SIGSEGV信号;当用户按下Ctrl-C键时,系统会发送SIGINT信号;当程序执行除零操作时,系统会发送SIGFPE信号等。C语言提供了signal函数来设置信号处理函数,其语法为:

  1. void (*signal(int signum, void (*handler)(int)))(int);


其中signum是要处理的信号的编号,handler是要设置的信号处理函数的指针。如果handler为SIG_IGN,则表示忽略该信号;如果handler为SIG_DFL,则表示恢复该信号的默认处理方式。signal函数返回一个指针,指向之前设置的信号处理函数。例如:

  1. #include <stdio.h>
  2. #include <signal.h>

  3. // 定义一个信号处理函数
  4. void handler(int signum) {
  5.     // 打印收到的信号编号
  6.     printf("Received signal %d\n", signum);
  7. }

  8. int main() {
  9.     // 设置SIGINT信号的处理函数为handler
  10.     signal(SIGINT, handler);
  11.     // 循环等待用户输入
  12.     while (1) {
  13.         char c = getchar();
  14.         // 如果输入q,则退出循环
  15.         if (c == 'q') {
  16.             break;
  17.         }
  18.     }
  19.     return 0;
  20. }

运行结果:

  1. ^CReceived signal 2
  2. ^CReceived signal 2
  3. q


可以看到,当用户按下Ctrl-C键时,程序不会终止,而是调用了自定义的信号处理函数,并打印了收到的信号编号(2表示SIGINT)。当用户输入q时,程序才退出循环。
szt1993 发表于 2024-4-10 09:00 | 显示全部楼层
使用信号处理函数处理异常这个是经常使用的方法
中国龙芯CDX 发表于 2024-4-10 15:52 | 显示全部楼层
信号是一种软件中断,用于通知进程发生了某些异常或事件
小夏天的大西瓜 发表于 2024-4-11 09:52 | 显示全部楼层
信号处理函数其实就是中断的一种使用方法
jf101 发表于 2024-4-14 15:51 | 显示全部楼层
使用信号处理函数用于中断的情况比较多
小小蚂蚁举千斤 发表于 2024-4-15 09:40 | 显示全部楼层
信号处理函数处理异常在单片机上很常用
OKAKAKO 发表于 2024-4-19 18:51 | 显示全部楼层
使用信号处理函数处理异常其实就是中断的一种用法
星辰大海不退缩 发表于 2024-4-21 11:35 | 显示全部楼层
信号是一种软件中断,经常用于触发事件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

350

主题

2689

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部