alarm()用來設置信號SIGALRM在經過參數seconds指定的秒數後傳送給目前的進程。如果參數seconds 為0,則之前設置的鬧鐘會被取消,並將剩下的時間返回。信號正常發送時返回值為0。若新的報警設置在前一次設定尚未結束時,發送,則返回前一次設置所剩時間。返回之前鬧鐘的剩余秒數,如果之前未設鬧鐘則返回0。
alarm()執行後,進程將繼續執行,在後期(alarm以後)的執行過程中將會在seconds秒後收到信號SIGALRM並執行其處理函數。
使用alarm函數可以設置一個計時器,在將來某個指定的時間該計時器會超時。當計時器超時時,產生SIGALARM信號。如果不捕捉或不忽略此信號,則其默認動作是終止調用該alarm函數的進程。
每個進程只能有一個鬧鐘時鐘,如果在調用alarm時,已經為該進程設置過鬧鐘時鐘,而且它還沒有超時,則將該鬧鐘時鐘的余留值作為本次alarm函數調用的返回值。以前登記的鬧鐘時鐘將被新值代替。
如果有以前為進程登記的尚未超過的鬧鐘時鐘,而且本次調用的seconds為0,則取消以前的鬧鐘時鐘,其余留值仍作為alarm的返回值。
(以上這幾段話摘自《unix環境高級編程》)
#include <stdio.h> #include <signal.h> #include <time.h> void func(); void main() { signal(SIGALRM,&func); alarm(4); while(1) pause(); } void func() { printf("getsigalrm!!\n"); alarm(1); }