- 论坛徽章:
- 0
|
本帖最后由 liudeee 于 2013-12-02 17:40 编辑
先上代码- #include <stdlib.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <signal.h>
- #include <setjmp.h>
- #include <fcntl.h>
- #define MAXLINE 4096
- static void sig_alrm(int);
- static jmp_buf env_alrm;
- int main(int argc, const char *argv[])
- {
- unsigned int k;
- int n;
- char line[MAXLINE];
- if (signal (SIGALRM, sig_alrm) == SIG_ERR)
- puts ("signal (SIGALRM) error");
- if (setjmp (env_alrm) != 0)
- puts ("read timeout");
- printf ("before:%d\n", k);
- k = alarm (5);
- printf ("after:%d\n", k);
- if ((n = read (STDIN_FILENO, line, MAXLINE)) < 0)
- puts ("read error");
- k = alarm (0);
- printf ("alrm:%d\n", k);
- write (STDOUT_FILENO, line, n);
- exit (0);
- return 0;
- }
- static void
- sig_alrm (int signo)
- {
- puts ("step into alrm");
- longjmp (env_alrm, 1);
- }
复制代码 我对这个程序的理解是,如果在read 状态下没有进行输入的话,超时后,会跳到第22行。之后再次执行第26行的alarm()函数,这样再过5秒后又会超时,重复以上动作。
可是实际上这个程序运行的时候,第一次超时过后,就再也不进入alrm中断服务函数了。 一直停留在了等待输入的状态。 不知道我哪里思考的不对。
编程环境:ubuntu13.04 gcc版本4.7.3 |
|