歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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.  
  5. void signalFun() 
  6.     printf("ByeBye!\n"); 
  7.     exit(0); 
  8. void testFun() 
  9.     int num; 
  10.     alarm(3); 
  11. loop:   printf("Please Input The Num : "); 
  12.     scanf("%d", &num); 
  13.     if(num > 10) 
  14.     { 
  15.         printf("Hello World!\n"); 
  16.         alarmm(0); 
  17.     } 
  18.     else 
  19.         goto loop; 
  20. int main(int argc, char *argv[]) 
  21.     signal(SIGALRM, signalFun); 
  22.     testFun(); 
  23.     return 0; 

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

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

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

Copyright © Linux教程網 All Rights Reserved