时间函数

2020-08-26 10:48:02 浏览数 (2)

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 有写没写差别很大

0 人点赞