0

有件事让我很困惑,核心代码如下

    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),这是什么意思?谢谢!

4

1 回答 1

5

它的存在是因为您可能会在两秒钟内输入密码(例如),因此您不希望在那之后一秒钟就响起警报。换句话说,如果您尝试超时的事情实际上在超时发生之前完成,它会关闭警报。

在没有当前警报alarm(0)处于活动状态时进行操作是无害的(除了干扰等其他问题sleep,但它们在这里并不重要)。

SIGALRM但是,在您不期望的情况下交付流氓很可能会造成一些损害(例如,如果您已将SIGALRM处理程序重置为其他内容),因此无论如何禁用它会更安全,即使它已过期。

于 2013-03-17T12:56:02.493 回答