alarm函数
- 函数原型:
unsigned int alarm(unsigned int seconds);
- 函数描述:设置定时器(闹钟)。在指定seconds后,内核会给当前进程发送14)SIGALRM信号。进程收到该信号,默认动作终止。每个进程都有且只有唯一的一个定时器。
- 函数返回值:返回0或剩余的秒数,无失败。例如:
- 常用操作:取消定时器alarm(0),返回旧闹钟余下秒数。
alarm使用的是自然定时法,与进程状态无关,就绪、运行、挂起(阻塞、暂停)、终止、僵尸…无论进程处于何种状态,alarm都计时。
RETURN VALUE
alarm() returns the number of seconds remaining until any previously scheduled alarm
was due to be delivered, or zero if there was no previously scheduled alarm.
alarm()返回任何先前计划的报警前剩余的秒数,如果没有事先安排的警报,则为零。
执行结果
第一次调用返回0,失败返回非0值。所以第一个n等于0。第二次调用,返回上一次调用的剩余秒数。睡觉了两秒,所以剩余秒数为5-2=3秒
。第三次调用,返回上一次调用的剩余秒数。因为中间没有睡眠,估计返回2秒。最后,因为传参为0,取消定时器,所以不会发送SIGALRM信号,所以sighandler
函数不会执行。
难点
难点在于,理解两次调用这个函数时,返回值的不同意思。第一次调用,如果调用成功,函数的返回是0。第二次调用,返回任何先前计划的报警前剩余的秒数
。
信号处理函数
//信号处理函数
void sighandler(int signo)
{
printf("signo==[%d]\n", signo);
}
总结
alarm:
1 每一个进程都只有一个时钟
2 alarm函数的返回值: 0 或者是上一个alarm剩余的秒数
3 alarm(0): 取消定时器
4 alarm函数发送的是SIGALRM信号