1.alarm函數
a.原型:unsigned int alarm(unsigned int seconds);
b.傳回值:傳回 0 或上一個 alarm 剩餘的秒數,無失敗。
c.作用:設定定時器(鬧鐘)。在指定 seconds 後,核心會給目前程序發送 14)SIGALRM 信号。程序收到該信号,預設動作終止。
2.setitimer函數
原型:int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);
a.參數:
which:指定定時方式
常用:自然定時: ITIMER_REAL → 14)SIGLARM-------------計算自然時間
struct itimerval的結構:
struct itimerval{
struct timeval{
it_interval.tv_sec;
it_interval.tv_usec;
}it_interval;
struct timeval{
it_value.tv_sec;
it_value.tv_usec;
}it_value;
}it,oldit;
it_interval:用來設定兩次定時任務之間間隔的時間。
it_value:定時的時長
b.傳回值:成功: 0;失敗: -1,設定 errno
c.作用:設定定時器(鬧鐘)。 可代替 alarm 函數。精度微秒 us,可以實作周期定時。
代碼:setitimer.c 用setitimer函數實作alarm函數的作用
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
/*
struct itimerval{
struct timeval{
it_interval.tv_sec;
it_interval.tv_usec;
}it_interval;
struct timeval{
it_value.tv_sec;
it_value.tv_usec;
}it_value;
}it,oldit;
*/
//利用setitimer函數實作alarm函數的作用
unsigned int my_alarm(unsigned int sec)
{
struct itimerval it,oldit;
int ret;
//it_value:定時的時長
//it_interval:用來設定兩次定時任務之間間隔的時間
it.it_value.tv_sec = sec;
it.it_value.tv_usec = 0;
it.it_interval.tv_sec = 0;
it.it_interval.tv_usec = 0;
//it作為傳入參數,oldit作為傳出參數(傳回鬧鐘定時所剩餘的時間)
ret = setitimer(ITIMER_REAL,&it,&oldit);
if(ret==-1){
perror("setitimer");
exit(1);
}
return oldit.it_value.tv_sec;
}
int main()
{
my_alarm(1);
for(int i=0; ;i++)
printf("%d\n",i);
return 0;
}
結果:就是電腦一秒鐘計數的個數