前段時間在做一個項目的時候遇到了一點問題,做了一個安全方面的東西,主要目的是為了實現一段程序在規定的時間內完成,如果在規定時間內不能夠完成相應的操作時,程序報警。
對於這種方案其解決方案有很多,我想到了利用系統的時間函數來對時間進行控制,也想到了用已有的協議去完成,但這些方法都過於繁雜,而且不利於理解,在我之前的一篇博文中我曾提到過一個函數alarm,那麼我就想到了可以利用Linux的信號機制來實現這一功能。
我們都知道一旦在程序中對消息進行了設置後,我們便可利用alarm函數進行時間的控制,例如我們在程序中先定於了SIGNAL如下:
signal(SIGALRM, signalFun);
而後在程序中對時間進行了設定:
alarm(5);
這樣就可以實現了再5秒後執行函數signalFun,如果再次過程中我們已經完成了程序,則可以用alarm(0);對剛剛我們設置的信號進行消去,
#include <stdio.h> #include <stdlib.h> #include <signal.h> void signalFun() { printf("ByeBye!\n"); exit(0); } void testFun() { int num; alarm(3); loop: printf("Please Input The Num : "); scanf("%d", &num); if(num > 10) { printf("Hello World!\n"); alarmm(0); } else goto loop; } int main(int argc, char *argv[]) { signal(SIGALRM, signalFun); testFun(); return 0; }
在這個程序中如果你輸入的數均小於10,則會讓你重新輸入,直到3秒到了以後如果還沒成功輸入大於10的數,則程序調用signalFun函數,如果在3秒內成功的輸入了一個大於10 的數,則會執行alarm(0);從而使定時信號取消,程序正常運行。
從而利用這種方法,我的安全方案也就告一段落了。