第1关:Linux获取时间
/*************************************************************************
> File Name: GetTimeTest.c
> Author: ma6174
> Mail: ma6174@163.com
> Created Time: Tue 17 Apr 2018 08:42:30 PM CST
************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <time.h>
typedef struct _localtimestruct
{
int year;
int month;
int day;
int hour;
int minute;
int second;
}localtimestruct;
time_t gettimesecond (void)
{
/*************Begin***********/
return time(NULL);
/**************End************/
}
void getlocaltv (localtimestruct *ltinfo)
{
/*************Begin***********/
time_t now_second = time(NULL);
struct tm *current = localtime(&now_second);
ltinfo->year = current->tm_year + 1900;
ltinfo->month = current->tm_mon + 1;
ltinfo->day = current->tm_mday;
ltinfo->hour = current->tm_hour;
ltinfo->minute = current->tm_min;
ltinfo->second = current->tm_sec;
/**************End************/
}
第2关:Linux时间相互转换
/*************************************************************************
> File Name: TimeTransTest.c
> Author: ma6174
> Mail: ma6174@163.com
> Created Time: Tue 17 Apr 2018 10:13:59 PM CST
************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
typedef struct _localtimestruct
{
int year;
int month;
int day;
int hour;
int minute;
int second;
}localtimestruct;
void func (void);
void timetrans (time_t current, char *time_str, localtimestruct *ltinfo, struct tm *tm_time)
{
/*************Begin***********/
memcpy(time_str,ctime(¤t),strlen(ctime(¤t)));
memcpy(tm_time,gmtime(¤t),sizeof(struct tm));
ltinfo->year=tm_time->tm_year+1900;
ltinfo->month=tm_time->tm_mon+1;
ltinfo->day=tm_time->tm_mday;
ltinfo->hour=tm_time->tm_hour;
ltinfo->minute=tm_time->tm_min;
ltinfo->second=tm_time->tm_sec;
/**************End************/
}
long getdifftimeval (void)
{
/*************Begin***********/
struct timeval start_time, end_time;
// 获取函数func执行前的时间
gettimeofday(&start_time, NULL);
// 执行函数func
func();
// 获取函数func执行后的时间
gettimeofday(&end_time, NULL);
// 计算时间差,先计算秒数差,再加上微秒数差
long diff_usec = (end_time.tv_sec - start_time.tv_sec) * 1000000 + (end_time.tv_usec - start_time.tv_usec);
return diff_usec;
/**************End************/
}
第3关:Linux 时间定时器
/*************************************************************************
> File Name: TimerTest.c
> Author: ma6174
> Mail: ma6174@163.com
> Created Time: Thu 19 Apr 2018 02:58:54 PM CST
************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
void func (void);
static int count = 0;//the number of calling loopevent
void loopevent (int signo)
{
/************Begin************/
func();
count++;
if (count == 5) {
// 达到循环5次后,取消定时器
struct itimerval it;
it.it_interval.tv_sec = 0;
it.it_interval.tv_usec = 0;
it.it_value.tv_sec = 0;
it.it_value.tv_usec = 0;
setitimer(ITIMER_PROF, &it, NULL);
}
/*************End*************/
}
void setlocaltimer (void)
{
/************Begin************/
// 设置信号处理函数,当定时器触发时调用loopevent函数
signal(SIGPROF, loopevent);
// 初始化itimerval结构体
struct itimerval it;
// 设置第一次启动定时器的时间,3s后第一次启动
struct timeval tv_value = {3, 0};
it.it_value = tv_value;
// 设置每次触发的时间间隔,每隔1s触发一次
struct timeval tv_interval = {1, 0};
it.it_interval = tv_interval;
// 设置ITIMER_PROF类型的定时器
setitimer(ITIMER_PROF, &it, NULL);
/*************End*************/
}