信号处理篇
参考了 wget , linux c编程实战中的bt下载软件 , nginx三者中的信号处理方法。都是采用 signal(signo,handler)
wget,bt下载软件,使用 signal 函数
signal(signo,signal_handler);
signo 信号处理代码 int
signal_handler 信号处理函数 void (*)(int)
返回值:若成功,指向在此之前的信号处理函数的指针;若出错,SIG_ERR
nginx,使用 sigaction 函数,实现和 signal 一样的功能
1 2 3 4 5 | struct sigaction sa; //定义结构体sa memset (&sa, 0, sizeof ( struct sigaction)); //置零sa sa.sa_hander = signal_hander; //设置信号处理函数,同signal函数中的signal_handler sigemptyset(sa.sa_mask); //清空sa中的信号集 sigaction(signo, &sa, NULL); //成功返回 0 ,出错返回 -1 |
信号处理函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <signal.h> typedef void (*sighandler_t)( int ); sighandler_t signal ( int signum, sighandler_t handler); int sigaction( int signum, const struct sigaction *act, struct sigaction *oldact); struct sigaction { void (*sa_handler)( int ); void (*sa_sigaction)( int , siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)( void ); }; |
信号集处理函数
1 2 3 4 5 6 7 8 9 10 11 | #include <signal.h> int sigemptyset(sigset_t *set); ///初始化信号集,并清空 int sigfillset(sigset_t *set); ///初始化信号集,并使其包括所有信号 int sigaddset(sigset_t *set, int signum); ///信号集中添加信号signum int sigdelset(sigset_t *set, int signum); ///信号集中删除信号signum <br> ///以上四个函数,成功返回 0,出错返回 -1 int sigismember( const sigset_t *set, int signum); ///测试信号signum是否在信号集中,在返回1,不在返回0 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步