2021SC@SDUSC
项目环境:
- 树莓派4b
- Ubuntu Desktop 21.04
闹钟实现:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
static void sig_alrm(int signo);
int main(void)
{
signal(SIGALRM,sig_alrm);
system("date");
alarm(5);
sleep(0);
printf("%d\n",alarm(5));
pause();
}
static void sig_alrm(int signo){
system("date");
return;
}
代码先设置了一个闹钟函数 alarm(20),即在 20 秒时将 SIGALRM 信号传送送给当前进程;然后又定义了一个延时函数 sleep(5) ,接着又定义了一个闹钟函数 alarm(15) ,它的作用是清除前面设置的闹钟 alarm(20) 并返回剩余的时间 20-5=15 秒。所以,程序先执行 system("date") 语句输出当前时间;然后进程休眠 5 秒后,程序执行输出语句 printf("%d n",alarm(15)),由于 alarm(15) 先返回 15 秒,即打印输出 15 ;接着程序执行 pause() 函数,使当前进程处于挂起状态,直到捕捉到一个信号