系统编程——注册信号处理方式

本文探讨了系统编程中注册信号处理的两种主要方式:signal()函数和sigaction()函数。详细介绍了这两个函数的参数、用法以及它们在处理信号时的区别。通过对信号值、信号处理方式和结构体sigaction的解析,帮助读者更好地理解和应用这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注册信号处理的两种方式

两个函数所在头文件都为 #include<signal.h>

1.signal()函数

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

  1. @signum:信号值 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
    6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11)
    SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16)
    SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21)
    SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26)
    SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31)
    SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38)
    SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42)
    SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46)
    SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50)
    SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54)
    SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58)
    SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62)
    SIGRTMAX-2 63)

SIGRTMAX-1 64) SIGRTMAX
@handler:信号处理方式,值可以为
#define SIG_DFL 0 /* 注册为系统默认处理,Default action. /
#define SIG_IGN 1 /
注册为忽略:删除信号Ignore signal. / (1能用 但是有警告)
还可以使用类型为 void (
)(int)的函数名
返回值:旧处理方式

2. sigaction函数

int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);
@signum:信号值
@act:要设置的信号处理方式
@oldact:保存旧处理方式
struct sigaction {
void (*sa_handler)(int); //SIG_DFL,SIG_IGN,信号处理函数名
void (*sa_sigaction)(int, siginfo_t *, void *); //当sa_flags为SA_SIGINFO
sigset_t sa_mask; //屏蔽信号集(不会删除会存入搁置信号集):与忽略不同(会删除)
int sa_flags; //标志位:SA_RESTART:重新调用系统调用,SA_INTERRUPT:中断 SA_SIGINFO:查询
void (*sa_restorer)(void);
};

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


void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值