关于alarm设置与Signal
来源:互联网 发布:郑州管家婆软件 编辑:程序博客网 时间:2024/04/29 20:39
通过alarm设置时钟,当达到设置的时候后收到alarm信号,然后通过longjmp和setjmp进行跳转,
每次收到信号时都进行alarm(0)恢复,但是一共收到6次alarm信号左右就收不到了
这是什么原因?
现在我用测试代码试了一下,只能收到一次alarm信号:
代码:
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/timeb.h>
#include <sys/uio.h>
#include <fcntl.h>
#include <time.h>
#include <string.h>
#include <signal.h>
#include <stropts.h>
#include <poll.h>
#include <pthread.h>
#include <stdlib.h>
#include <ctype.h>
#include <setjmp.h>
#include <sys/time.h>
void sig_alarm(int signo);
jmp_buf env;
int main(int argc, char **argv)
{
int n;
int jmp_flag=0;
int set_alarm=0;
char line[10];
if(signal(SIGALRM, sig_alarm)==SIG_ERR)
printf("signal error\n");
//if(jmp_flag==0)
//{
// if(setjmp(env)!=0)
// printf("set jmp error\n");
// jmp_flag=1;
//}
setjmp(env);
printf("set_alarm=%d\n", set_alarm);
if(set_alarm==1)
{
printf("release alarm\n");
n=alarm(0);
printf("return=%d\n", n);
}
printf("set jmp\n");
set_alarm=1;
n=alarm(5);
printf("n=%d\n", n);
if(n=read(STDIN_FILENO, line, 10)<0)
{
printf("read error\n");
}
alarm(0);
write(STDOUT_FILENO, line, n);
printf("stop\n");
return 0;
}
void sig_alarm(int signo)
{
longjmp(env, 1);
}
日志如下:
set_alarm=0
set jmp
n=0
set_alarm=1
release alarm
return=0
set jmp
n=0
signal是安装一次后就恢复成默认的处理方式
现在一般使用sigaction
signal换成sigset就能避免这种情况
- 关于alarm设置与Signal
- SIGNAL & ALARM
- linux中的信号处理(signal与alarm)
- linux下signal与alarm函数实现定时器刷新
- signal raise alarm用法
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- Linux Signal (4): alarm和pause
- Linux Signal (4): alarm和pause
- Linux Signal (4): alarm和pause
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- linux中的信号处理(signal和alarm)
- Linux Signal (4): alarm和pause
- 信号signal()、alarm()、信号集函数、sigprocmask()
- 写一个块设备驱动(5)
- OpenCV HOGDescriptor 参数图解
- launcher修改--获取应用列表launcher源码解析
- 22222
- 写一个块设备驱动(6)
- 关于alarm设置与Signal
- 写一个块设备驱动 (7)
- PlSQL远程连接oracle设置
- 写一个块设备驱动(8)
- Terminate Your Threads Cleanly 干净的终止线程
- smarty模板中类似for的功能实现
- setsockopt设置socket状态
- 写一个块设备驱动 (9)
- 关于让在WASCE2.1上的项目发布和部署更快一点