【发布时间】:2010-12-12 02:40:30
【问题描述】:
问题一定很简单,但是..我不知道是什么。它应该继续打印“alarm”一段时间,但它只打印一次然后程序就死了:
#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);
}
但我仍然对此束手无策,并试图理解为什么我需要这样编写代码。
【问题讨论】:
-
只是一个说明,以确保您知道这一点。如果在 sleep() 期间您被信号唤醒,则对 sleep() 的调用将返回该睡眠中剩余的秒数。它不会继续等待剩余的时间。
-
阅读 'alarm' 和 'sleep' 的手册页会告诉你到底发生了什么(而且它们很短——你可以在大约只要花时间阅读它们的全部内容你来撰写这篇文章)