8.1 alarm
软定时器 功能:专门为sigalrm信号而设,在指定的时间seconds秒后,将向进程本身发送sigalrm信号,又称为闹钟时间。
函数原型:
代码语言:javascript复制unsigned int alarm(unsigned int seconds);
参数释义: seconds为零,那么进程内将不再包含任何闹钟时间。
返回值:如果调用alarm()前,进程中已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0
说明:进程调用alarm后,任何以前的alarm()调用都将无效。
8.2 setitimer
功能:setitimer()比alarm功能强大,支持3种类型的定时器
函数原型:
代码语言:javascript复制#include<sys/time.h>
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue));
参数释义:
第一个参数which指定定时器类型 第二个参数是结构itimerval的一个实例,结构itimerval形式 第三个参数可不做处理。 返回值:成功返回0失败返回-1
itimer_real: 设定绝对时间;经过指定的时间后,内核将发送SIGALRM信号给本进程 itimer_virtual 设定程序执行时间,经过指定的时间后,内核将发送SIGVTALRM信号给本进程 itimer_prof 设定进程执行以及内核因本进程而消耗的时间和,经过指定的时间后,内核将发送SIGPROF信号给本进程
8.3 文件访问时间
代码语言:javascript复制#include<sys/types.h>
#include<utime.h>
int utime(const char *name,const struct utiimebuf *times);
//成功返回0,失败返回-1
参数释义:
如果times是一个空指针,则存取时间和修改时间都设置为当前时间 如果times是一个非空指针,则你懂得。当然,权限要够(root是肯定够了)。
此函数所用结构体: struct utimebuf { time_t actime; /* access time / time_t modtime; / modification time */ }
补上前面的代码:
alarm.c
代码语言:javascript复制#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void)
{
int a=0;
alarm(1);
for(;;a )
{
printf("%dn",a);
}
return 0;
}
//可以拿去试试你的电脑能跑多少,反正我的只能四万多
seitimer.c
代码语言:javascript复制#include <stdio.h>
#include <sys/time.h>
#include <errno.h>
#include <stdlib.h>
#include <signal.h>
void myfunc()
{
int count = 0;
for(count = 0; ;count )
{
printf("yue?n");
}
}
int main()
{
struct itimerval run,runout;
signal(SIGALRM,myfunc);
run.it_value.tv_sec = 3;
run.it_value.tv_usec = 0;
run.it_interval.tv_sec = 2;
run.it_interval.tv_usec = 0;
if((setitimer(ITIMER_REAL,&run,&runout))==-1)
{
perror("setitimer error");
return -1;
}
while(1);
return 0;
}
这里提一下,在Linux里面那个缓冲区是很重要的,所以那个 n 有写没写差别很大