- 论坛徽章:
- 0
|
下面这段程序是书上写的,作用是若10S内有输入,程序正常返回,若没有输入,则进入sgig_alrm函数;
我不太理解那个alarm(0),按书上的理解,这个alarm(0)的意思是取消之前的alarm闹钟,不返回SIGALRM;
我是这样理解的 :这段代码先alarm(10);然后走完两个if语句,这用不了10秒吧 ?然后就到了alarm(0),取消了之前的alarm(10)
这段代码我的理解是否有问题 ?
- #define MAXLINE 4096
- int main(void)
- {
- int n;
- char line[MAXLINE];
- /*设定超时时限*/
- alarm(10);
- /*信号注册函数*/
- if(signal(SIGALRM, sig_alrm) == SIG_ERR)
- perror("signal");
- if((n = read(STDIN_FILENO, line, MAXLINE)) < 0)
- perror("read");
- alarm(0);
-
- write(STDOUT_FILENO, line, n);
- exit(0);
- }
- static void sig_alrm(int signo)
- {
- printf("in here alarm\n");
- }
复制代码
#############
我觉得应该这样修改,不对的地方请指正
- #define MAXLINE 4096
- int main(void)
- {
- int n;
- char line[MAXLINE];
- /*设定超时时限*/
- alarm(10);
- /*信号注册函数*/
- if(signal(SIGALRM, sig_alrm) == SIG_ERR)
- perror("signal");
- if((n = read(STDIN_FILENO, line, MAXLINE)) < 0)
- perror("read");
- else
- alarm(0); //read()的返回值大于0,则不需要返回SIGALRM信号,所以调用alarm(0)取消之前的alarm(10)
-
- write(STDOUT_FILENO, line, n);
- exit(0);
- }
- static void sig_alrm(int signo)
- {
- printf("in here alarm\n");
- }
复制代码 |
|