有些东西让我感到困惑,核心代码是跟着
char buffer[MAX_BUFFER+1];
int ret;
signal(SIGALRM,wakeup);
printf("You have 3 seconds to enter the password\n");
alarm(3);
ret=read(0,buffer,MAX_BUFFER);
alarm(0);
你能告诉我为什么这里需要秒警报(0),这是什么意思?谢谢!!!
答案 0 :(得分:5)
它就在那里因为您可以在两秒钟内输入密码(例如),所以您不希望在此之后一秒钟发出警报。换句话说,如果您尝试超时的内容在发生超时之前实际完成,它会将关闭警报。
当没有当前警报激活时执行alarm(0)
是无害的(除了干扰sleep
之类的其他问题等等,但它们在这里并不重要)。
但是,如果您未预料到流氓SIGALRM
,则可能会造成一些损害(例如,如果您已将SIGALRM
处理程序重置为其他内容),那么无论如何,即使它已过期,它也更安全。