- 论坛徽章:
- 0
|
最近在学习linux信号时遇到一点问题,百思不得其解,其代码如下:- #include<setjmp.h>
- 2 #include "../include/apue.h"
- 3
- 4 static void sig_alrm(int);
- 5 static jmp_buf env_alrm;
- 6
- 7 int main(void)
- 8 {
- 9 int n;
- 10 char line[MAXLINE];
- 11
- 12 if(signal(SIGALRM, sig_alrm) == SIG_ERR)
- 13 {
- 14 err_sys("signal error");
- 15 }
- 16 if(setjmp(env_alrm) != 0)
- 17 ;
- 18 // err_quit("set_jmp error");
- 19 alarm(10);
- 20 printf("read start\n");
- 21 if((n = read(STDIN_FILENO, line,MAXLINE)) < 0)
- 22 err_sys("read error");
- alarm(0);
- 24 write(STDOUT_FILENO, line, n);
- 25 exit(0);
- 26 }
- 27
- 28 static void sig_alrm(int signo)
- 29 {
- 30 signal(SIGALRM,sig_alrm);
- 31 printf("signal start\n");;
- 32 //write(STDOUT_FILENO, line, n);
- 33 longjmp(env_alrm,1);
- 34 }
复制代码 其运行的结果如下:- [root@localhost signal]# gcc -o lread lread.c ../include/err.c
- [root@localhost signal]# ./lread
- read start
- signal start
- read start
复制代码 会捕捉到第一个定时信号,但是为什么跳转回去的时候对SIGALRM的信号就不处理了呢?望懂的童鞋指点一下,万分感激
|
|