xref: /DragonOS/user/apps/test_alarm/src/main.rs (revision fbd63a301c5648f906eeb802f10ac03518ba1264)
1*fbd63a30SSMALLC extern crate libc;
2*fbd63a30SSMALLC use libc::{signal, sleep, syscall, SYS_alarm, SIGALRM};
3*fbd63a30SSMALLC 
handle_alarm(_: i32)4*fbd63a30SSMALLC extern "C" fn handle_alarm(_: i32) {
5*fbd63a30SSMALLC     println!("Alarm ring!");
6*fbd63a30SSMALLC }
7*fbd63a30SSMALLC 
main()8*fbd63a30SSMALLC fn main() {
9*fbd63a30SSMALLC     // 设置信号处理函数
10*fbd63a30SSMALLC     unsafe {
11*fbd63a30SSMALLC         signal(SIGALRM, handle_alarm as usize);
12*fbd63a30SSMALLC     }
13*fbd63a30SSMALLC 
14*fbd63a30SSMALLC     //test1: alarm系统调用能否正常运行
15*fbd63a30SSMALLC     unsafe {
16*fbd63a30SSMALLC         syscall(SYS_alarm, 5);
17*fbd63a30SSMALLC     }
18*fbd63a30SSMALLC     println!("Alarm set for 5 seconds");
19*fbd63a30SSMALLC     unsafe {
20*fbd63a30SSMALLC         sleep(6);
21*fbd63a30SSMALLC     }
22*fbd63a30SSMALLC     println!("Test 1 complete");
23*fbd63a30SSMALLC 
24*fbd63a30SSMALLC     //test2:在上一个alarm定时器未完成时重新调用alarm,查看返回值是否为上一个alarm的剩余秒数,
25*fbd63a30SSMALLC     //并test第三个alarm定时器能否正常运行
26*fbd63a30SSMALLC 
27*fbd63a30SSMALLC     unsafe {
28*fbd63a30SSMALLC         let remaining = syscall(SYS_alarm, 5);
29*fbd63a30SSMALLC         println!("Remaining time for previous alarm: {}", remaining);
30*fbd63a30SSMALLC     }
31*fbd63a30SSMALLC     println!("Alarm set for 5 seconds");
32*fbd63a30SSMALLC     unsafe {
33*fbd63a30SSMALLC         let remaining = syscall(SYS_alarm, 3);
34*fbd63a30SSMALLC         println!("Remaining time for previous alarm: {}", remaining);
35*fbd63a30SSMALLC     }
36*fbd63a30SSMALLC     unsafe {
37*fbd63a30SSMALLC         sleep(4);
38*fbd63a30SSMALLC     }
39*fbd63a30SSMALLC     println!("Alarm set for 3 seconds");
40*fbd63a30SSMALLC 
41*fbd63a30SSMALLC     println!("Test 2 complete");
42*fbd63a30SSMALLC }
43