【操作系统】Linux时间编程(头歌)

第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(&current),strlen(ctime(&current)));
    memcpy(tm_time,gmtime(&current),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*************/
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值