Linux signal、alarm和pause函数
2016-11-19 16:12
260 查看
signal、alarm和pause函数
头文件和函数原型
#include <signal.h>typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);或者
void (*signal(int signum, void (* handler)(int)))(int);
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
#include <unistd.h>
int pause(void);
功能
signal函数用来跟某个信号设置信号处理函数,signal依参数signum指定的信号来设置该信号的处理函数。当指定信号到达时就会跳转到参数handler指定的函数执行。如果handler不是函数指针则必须是两常量之一:SIG_IGN忽略signum指定的信号。SIG_DFL将使用signum的缺省信号处理方式。alarm函数的参数的值是秒数。使用alarm函数可以设置一个计时器,在将来某个时间超时时产生SIGALRM信号。如果不忽略或不捕捉此信号,则默认动作是终止调用此函数的进程。
pause函数使调用函数挂起直到捕捉到一个信号。pause会使当前进程暂停(进入休眠模式),直到被(signal)中断。
例子
#include <unistd.h> #include <signal.h> #include <stdio.h> void handler() { printf("Hello world!\n"); } int main() { int i; signal(SIGALRM, handler); alarm(5); for(i = 1; i < 7; i++) { printf("sleep %d ...\n", i); sleep(1); } }
unix环境高级编程的例子
sleep简单不完整的实现1
#include <signal.h> #include <unistd.h> static void sig_alrm(int signo) { /*nothing to do, just return to wake up the pause*/ } unsigned int sleep1(unsigned int nsecs) { if(signal(SIGALRM, sig_alrm) == SIG_ERR) { return(nsecs); } alarm(nsecs); pause(); return(alarm(0)); }
sleep简单不完整的实现2
#include <setjmp.h> #include <signal.h> #include <unistd.h> static jmp_buf env_alrm; static void sig_alrm(int signo) { longjmp(env_alrm, 1); } unsigned int sleep2(unsigned int nsecs) { if(signal(SIGALRM, sig_alrm) == SIG_ERR) { return(nsecs); } if(setjmp(env_alrm) == 0) { alarm(nsecs); pause(); } return(alarm(0)); }
相关文章推荐
- linux信号处理之signal、sigaction、alarm、pause函数
- Linux Signal (4): alarm和pause
- linux中的信号3——alarm、pause函数
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- linux下signal与alarm函数实现定时器刷新
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- Linux Signal (4): alarm和pause
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- Linux Signal (4): alarm和pause
- linux中的信号处理(signal与alarm)
- Linux System Programming note 10 —— Signal
- Linux 新的API signalfd、timerfd、eventfd使用说明
- linux 信号signal和sigaction理解
- Linux信号(signal) 机制分析
- Linux下的定时器:alarm()与setitimer()