Capture signal and ignore some exceptions in LINUX

Capture signal and ignore some exceptions in LINUX

Sometimes we need the application skip some exceptions and continue to execute subsequent code, such as acceptance for divided by zero error, access free memory and etc.

For these conditions, signal of OS(Operating System) can solve these.

Common signals

#define NSIG 23

#define SIGINT 2
#define SIGILL 4
#define SIGABRT_COMPAT 6
#define SIGFPE 8
#define SIGSEGV 11
#define SIGTERM 15
#define SIGBREAK 21
#define SIGABRT 22       /* used by abort, replace SIGIOT in the future */
#define SIGABRT2 22

Detailed information to <signal.h>.

Example

Here we present a demo about access bad memory.

#include <setjmp.h>
#include "signal.h"
#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"

void handler(int sig)
{
    printf("The cause the signal is %d\n", sig);
    longjmp(env, 1);
}

void main()
{
    signal(SIGFPE, handler);
    
    // store context
    int r = setjmp(env);
    if (r == 0)
    {
        // it maybe cause error
        int res = 10/0;
    else
    {
        printf("jump this code !!");
    }
}

NOTE

As you can see we also have used the header, <longjmp.h>, which is a little same as goto and usually used to skip some exception in C language. More details.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值