- 论坛徽章:
- 0
|
alarm系统调用一问!
- #include <stdio.h>;
- #include <unistd.h>;
- #include <signal.h>;
- #include <stdlib.h>;
- static int counter; //全局静态变量
- void fn(int signo) //ALRM信号调用的函数
- {
- counter++;
- write(1,"CAUGHT SIGALRM\n",15);
- //用write是因为它可重入
- exit(0);
- }
- int main()
- {
- int i;
- sigset_t sigs;
- struct sigaction sa_old;
- //保存信号响应原来的值,可以理解为保护现场?
- struct sigaction sa_new;
- //定义新的信号响应
- counter=0;//初始化counter;
- sa_new.sa_handler=fn;
- //绑定响应的函数
- sigemptyset(&sa_new.sa_mask);
- //阻塞并初始化信号集,这里没有经过什么特殊设置
- sa_new.sa_flags=0;
- //这个好像没什么特殊的要求
- sigaction(SIGALRM,&sa_new,&sa_old);
- //SIGALRM建立新的信号响应
- alarm(2);
- i=0;
- do{
- printf("%d\n",i++); //如果时间长了i会溢出
- }while(counter<1);
- alarm(0);
- exit(0);
- }
复制代码 |
|