时间函数

举报
看,未来 发表于 2020/12/30 01:29:33 2020/12/30
【摘要】 目录 8.1、alarm 8.2、setitimer 8.3、文件访问时间 8.1 alarm 软定时器 功能:专门为sigalrm信号而设,在指定的时间seconds秒后,将向进程本身发送sigalrm信号,又称为闹钟时间。 函数原型: unsigned int alarm(unsigned int seconds); 1 参数释义: se...

目录

8.1、alarm

8.2、setitimer

8.3、文件访问时间




8.1 alarm

软定时器
功能:专门为sigalrm信号而设,在指定的时间seconds秒后,将向进程本身发送sigalrm信号,又称为闹钟时间。

函数原型:

unsigned int alarm(unsigned int seconds);

  
 
  • 1

参数释义:
seconds为零,那么进程内将不再包含任何闹钟时间。

返回值:如果调用alarm()前,进程中已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0

说明:进程调用alarm后,任何以前的alarm()调用都将无效。

8.2 setitimer

功能:setitimer()比alarm功能强大,支持3种类型的定时器

函数原型:

#include<sys/time.h>

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue));

  
 
  • 1
  • 2
  • 3

参数释义:

第一个参数which指定定时器类型
第二个参数是结构itimerval的一个实例,结构itimerval形式
第三个参数可不做处理。
返回值:成功返回0失败返回-1

itimer_real: 设定绝对时间;经过指定的时间后,内核将发送SIGALRM信号给本进程
itimer_virtual 设定程序执行时间,经过指定的时间后,内核将发送SIGVTALRM信号给本进程
itimer_prof 设定进程执行以及内核因本进程而消耗的时间和,经过指定的时间后,内核将发送SIGPROF信号给本进程

8.3 文件访问时间
#include<sys/types.h>
#include<utime.h>

int utime(const char *name,const struct utiimebuf *times);

//成功返回0,失败返回-1

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

参数释义:

如果times是一个空指针,则存取时间和修改时间都设置为当前时间
如果times是一个非空指针,则你懂得。当然,权限要够(root是肯定够了)。

此函数所用结构体:
struct utimebuf
{
time_t actime; /* access time /
time_t modtime; /
modification time */
}

补上前面的代码:

alarm.c

#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("%d\n",a);
	}
	return 0;
}
//可以拿去试试你的电脑能跑多少,反正我的只能四万多

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

seitimer.c

#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;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

//这里提一下,在Linux里面那个缓冲区是很重要的,所以那个 \n 有写没写差别很大

文章来源: lion-wu.blog.csdn.net,作者:看,未来,版权归原作者所有,如需转载,请联系作者。

原文链接:lion-wu.blog.csdn.net/article/details/103947544

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。