Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 关于信号和警报_Linux_Signals - Fatal编程技术网

Linux 关于信号和警报

Linux 关于信号和警报,linux,signals,Linux,Signals,有一件事让我很困惑,核心代码是遵循的 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),这是什么意思?谢谢 之所以存在,是因

有一件事让我很困惑,核心代码是遵循的

    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)
是无害的(除了其他问题,如干扰
睡眠等,但它们在这里并不重要)


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

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

在没有当前报警激活的情况下执行
报警(0)
是无害的(除了其他问题,如干扰
睡眠等,但它们在这里并不重要)


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

您有时也可以使用
poll
进行此类操作。您有时可以使用
poll
进行此类操作。