linux中time函数

时间戳的三种需求格式:time_t char* struct tm
下图为三种需求格式之间相互转换需要用到的函数。
linux中time函数_第1张图片

time(),gmtime(),localtime(),mktime(),strftime()

linux中time函数_第2张图片
localtime中返回值struct tm*,指向静态区
linux中time函数_第3张图片

time()函数

#include 

time_t time(time_t *t);

此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起到现在所经过的秒数。如果t 并非空指针的话,此函数也会将返回值存到t 指针所指的内存。
timer=NULL时,得到机器日历时间

返回值:
成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno 中。

strftime();

在这里插入图片描述
将参数4中的time按照参数3的要求获取,然后写入到参数1中。参数1的大小由参数2限制。

time_t mktime(struct tm *tm)
//将struct tm格式转换为time_t格式,如果中间数据有溢出,则自动调整时间
//FS/100day.c
struct tm *tm;
	time_t timestamp;
	char timestr[BUFFSIZE];

	timestamp = time(NULL);
	tm = localtime(&timestamp);
	
	/*
	fprintf(stdout, "time:	%d-%d-%d %d:%d:%d\n", \
		tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, tm->tm_hour, \
		tm->tm_min, tm->tm_sec);		
	*/
	strftime(timestr, BUFFSIZE,"Now: %Y-%m-%d" ,tm);
	puts(timestr);	

	tm->tm_mday += 100;
	mktime(tm);	

	strftime(timestr, BUFFSIZE,"100 days later: %Y-%m-%d" ,tm);
	puts(timestr);

在这里插入图片描述

//FS/timelog.c
/*
把当前时间按照相应格式每秒钟写入到一个文件中去,用另一个终端
采用“tail -f 文件” 监测写入的中间状态
1.fopen的a+模式;
2.time_t,localtime
3.除了终端设备,其他设备默认是全缓冲形式,需要采用fflush不断刷新,
才能看到中间过程
*/
	char buf[BUFFSIZE];
	int count;
	count = 0;
	while(fgets(buf, BUFFSIZE, fp) != NULL)
	{
		count++;
	}

	time_t stamp;	
	struct tm* tm; 
	while(1)
	{
		time(&stamp);		
		tm = localtime(&stamp);	
		fprintf(fp, "%-4d%d-%d-%d %d:%d:%d\n", ++count,\
			tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,\
			tm->tm_hour, tm->tm_min, tm->tm_sec);
		fflush(fp);
	
		sleep(1);
	}

linux中time函数_第4张图片

你可能感兴趣的:(linux系统编程,linux,c语言)