歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux中的定時信號機制

Linux中的定時信號機制

日期:2017/3/1 10:14:36   编辑:Linux編程

前段時間在做一個項目的時候遇到了一點問題,做了一個安全方面的東西,主要目的是為了實現一段程序在規定的時間內完成,如果在規定時間內不能夠完成相應的操作時,程序報警。

對於這種方案其解決方案有很多,我想到了利用系統的時間函數來對時間進行控制,也想到了用已有的協議去完成,但這些方法都過於繁雜,而且不利於理解,在我之前的一篇博文中我曾提到過一個函數alarm,那麼我就想到了可以利用Linux的信號機制來實現這一功能。

我們都知道一旦在程序中對消息進行了設置後,我們便可利用alarm函數進行時間的控制,例如我們在程序中先定於了SIGNAL如下:

signal(SIGALRM, signalFun);

而後在程序中對時間進行了設定:

alarm(5);

這樣就可以實現了再5秒後執行函數signalFun,如果再次過程中我們已經完成了程序,則可以用alarm(0);對剛剛我們設置的信號進行消去,【Linux公社 http://www.linuxidc.com 】

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <signal.h>
  4. void signalFun()
  5. {
  6. printf("ByeBye!\n");
  7. exit(0);
  8. }
  9. void testFun()
  10. {
  11. int num;
  12. alarm(3);
  13. loop: printf("Please Input The Num : ");
  14. scanf("%d", &num);
  15. if(num > 10)
  16. {
  17. printf("Hello World!\n");
  18. alarmm(0);
  19. }
  20. else
  21. goto loop;
  22. }
  23. int main(int argc, char *argv[])
  24. {
  25. signal(SIGALRM, signalFun);
  26. testFun();
  27. return 0;
  28. }

在這個程序中如果你輸入的數均小於10,則會讓你重新輸入,直到3秒到了以後如果還沒成功輸入大於10的數,則程序調用signalFun函數,如果在3秒內成功的輸入了一個大於10 的數,則會執行alarm(0);從而使定時信號取消,程序正常運行。

從而利用這種方法,我的安全方案也就告一段落了。

相關閱讀:Unix系統alarm函數詳解 http://www.linuxidc.com/Linux/2012-07/66837.htm

Copyright © Linux教程網 All Rights Reserved