打印
[开发资料]

使用信号处理函数处理异常

[复制链接]
594|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LOVEEVER|  楼主 | 2024-4-7 21:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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


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

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

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

int main() {
    // 设置SIGINT信号的处理函数为handler
    signal(SIGINT, handler);
    // 循环等待用户输入
    while (1) {
        char c = getchar();
        // 如果输入q,则退出循环
        if (c == 'q') {
            break;
        }
    }
    return 0;
}

运行结果:

^CReceived signal 2
^CReceived signal 2
q


可以看到,当用户按下Ctrl-C键时,程序不会终止,而是调用了自定义的信号处理函数,并打印了收到的信号编号(2表示SIGINT)。当用户输入q时,程序才退出循环。

使用特权

评论回复
沙发
szt1993| | 2024-4-10 09:00 | 只看该作者
使用信号处理函数处理异常这个是经常使用的方法

使用特权

评论回复
板凳
中国龙芯CDX| | 2024-4-10 15:52 | 只看该作者
信号是一种软件中断,用于通知进程发生了某些异常或事件

使用特权

评论回复
地板
小夏天的大西瓜| | 2024-4-11 09:52 | 只看该作者
信号处理函数其实就是中断的一种使用方法

使用特权

评论回复
5
jf101| | 2024-4-14 15:51 | 只看该作者
使用信号处理函数用于中断的情况比较多

使用特权

评论回复
6
小小蚂蚁举千斤| | 2024-4-15 09:40 | 只看该作者
信号处理函数处理异常在单片机上很常用

使用特权

评论回复
7
OKAKAKO| | 2024-4-19 18:51 | 只看该作者
使用信号处理函数处理异常其实就是中断的一种用法

使用特权

评论回复
8
星辰大海不退缩| | 2024-4-21 11:35 | 只看该作者
信号是一种软件中断,经常用于触发事件

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

291

主题

1900

帖子

4

粉丝