mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 03:56:44 +00:00
43 lines
1.1 KiB
Rust
43 lines
1.1 KiB
Rust
extern crate libc;
|
||
use libc::{signal, sleep, syscall, SYS_alarm, SIGALRM};
|
||
|
||
extern "C" fn handle_alarm(_: i32) {
|
||
println!("Alarm ring!");
|
||
}
|
||
|
||
fn main() {
|
||
// 设置信号处理函数
|
||
unsafe {
|
||
signal(SIGALRM, handle_alarm as usize);
|
||
}
|
||
|
||
//test1: alarm系统调用能否正常运行
|
||
unsafe {
|
||
syscall(SYS_alarm, 5);
|
||
}
|
||
println!("Alarm set for 5 seconds");
|
||
unsafe {
|
||
sleep(6);
|
||
}
|
||
println!("Test 1 complete");
|
||
|
||
//test2:在上一个alarm定时器未完成时重新调用alarm,查看返回值是否为上一个alarm的剩余秒数,
|
||
//并test第三个alarm定时器能否正常运行
|
||
|
||
unsafe {
|
||
let remaining = syscall(SYS_alarm, 5);
|
||
println!("Remaining time for previous alarm: {}", remaining);
|
||
}
|
||
println!("Alarm set for 5 seconds");
|
||
unsafe {
|
||
let remaining = syscall(SYS_alarm, 3);
|
||
println!("Remaining time for previous alarm: {}", remaining);
|
||
}
|
||
unsafe {
|
||
sleep(4);
|
||
}
|
||
println!("Alarm set for 3 seconds");
|
||
|
||
println!("Test 2 complete");
|
||
}
|