用sigaction实现signal

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

typedef void (*sig_handler_t)(int);

void sig_int(int signo);

sig_handler_t signal(int signo, sig_handler_t func);

void sig_int(int signo)
{
    printf("caught signal INTERRUPT!\n");
}

sig_handler_t signal(int signo, sig_handler_t func)
{
    struct sigaction act, oact;
    
    sigemptyset(&act.sa_mask);
    act.sa_handler = func;
    
    if(sigaction(signo, &act, &oact) < 0)
    {   
        perror("sigaction");
        return 0;
    }   
    return oact.sa_handler;
}

int main(int argc, char **agrv)
{
    signal(SIGINT, sig_int);
    while(1)
    {   
        pause();
    }   
    return 0;
}

阅读更多
文章标签: signal include struct
个人分类: linux 编程
上一篇可重入函数
下一篇sigsetjmp &amp; siglongjmp
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭