通过signal函数捕获SIGSEGV、SIGBUS等信号,避免程序崩溃。 使用errno变量来检查函数调用时是否出现错误。 使用setjmp和longjmp函数来处理异常怎么写
时间: 2024-03-08 08:49:05 浏览: 137
异常处理并邮件发送且可防止程序崩溃
以下是三种方法的简单示例:
1. 通过signal函数捕获信号
```c
#include <signal.h>
void signal_handler(int signal) {
// 处理信号
}
int main() {
// 注册信号处理函数
signal(SIGSEGV, signal_handler);
signal(SIGBUS, signal_handler);
// 程序代码
// ...
return 0;
}
```
2. 使用errno变量检查函数调用是否出错
```c
#include <stdio.h>
#include <errno.h>
int main() {
FILE* fp = fopen("file.txt", "r");
if (fp == NULL) {
printf("打开文件出错:%d\n", errno);
} else {
// 文件操作代码
// ...
fclose(fp);
}
return 0;
}
```
3. 使用setjmp和longjmp函数处理异常
```c
#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
void error_handler() {
longjmp(buf, 1);
}
int main() {
// 设置错误处理函数
if (setjmp(buf) != 0) {
printf("出现错误\n");
return 1;
}
// 程序代码
// ...
// 出现错误时调用错误处理函数
error_handler();
return 0;
}
```
需要注意的是,以上示例仅为演示用途,实际使用时需要根据具体情况进行修改和完善。
阅读全文