问题一定很简单,但是..我不知道它是什么。它应该继续打印“alaarm”一段时间,但它只打印一次,然后程序就终止了:
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <signal.h>
void onAlarm();
void setupAlarm() {
signal(SIGALRM, onAlarm);
alarm(1);
}
void onAlarm() {
setupAlarm();
printf("alarmmmmmmmmmmmmmmmmm\n");
}
void main()
{
setupAlarm();
sleep(1000);
}
这里可能出了什么问题?去掉 sleep(1000)
会使程序立即终止(也就是说,甚至不显示那个“alaaarm”)。
回答
好的,下面的代码可以工作:
void onAlarm() {
printf("alarmmmmmmmmmmmmmmmmm\n");
alarm(1);
sleep(1);
}
void main()
{
signal(SIGALRM, onAlarm);
alarm(1);
sleep(2);
}
但我仍在努力解决这个问题,并试图理解为什么我需要这样编写代码。
最佳答案
哎呀,我之前的回答完全错误。查看调用 onAlarm()
时会发生什么:
它重置信号处理程序,
重置闹钟
取消之前的警报后,它再次开始等待。
什么代码路径实际上到达您对printf
的调用?
关于c - unix 中的信号/警报问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4420163/