main.rs 1.1 KB

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