前段時間在做一個項目的時候遇到了一點問題,做了一個安全方面的東西,主要目的是為了實現一段程序在規定的時間內完成,如果在規定時間內不能夠完成相應的操作時,程序報警。
對於這種方案其解決方案有很多,我想到了利用系統的時間函數來對時間進行控制,也想到了用已有的協議去完成,但這些方法都過於繁雜,而且不利於理解,在我之前的一篇博文中我曾提到過一個函數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);從而使定時信號取消,程序正常運行。
從而利用這種方法,我的安全方案也就告一段落了。