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)
是无害的(除了其他问题,如干扰睡眠等,但它们在这里并不重要)
但是,在您不期望的情况下交付rogueSIGALRM
可能会造成一些损害(例如,如果您将SIGALRM
处理程序重置为其他处理程序),因此禁用它更安全,即使它已过期。它就在那里,因为您可以在两秒钟内输入密码(例如),所以你不希望闹钟在那之后一秒钟响。换句话说,如果您试图超时的事情实际上在超时发生之前完成,它会关闭警报
在没有当前报警激活的情况下执行报警(0)
是无害的(除了其他问题,如干扰睡眠等,但它们在这里并不重要)
但是,在您不期望的情况下交付rogueSIGALRM
可能会造成一些损害(例如,如果您将SIGALRM
处理程序重置为其他处理程序),因此禁用它更安全,即使过期了。您有时也可以使用poll
进行此类操作。您有时可以使用poll
进行此类操作。