time,gettimeofday,clock_gettime

摘要:
时间()提供二级精度。1.头文件<time h>2.函数原型时间_ ttime函数返回从UTC1970-1-10:00:0到当前的秒数。使用time()函数和其他函数获取当前系统时间或标准时间#include#includeintmain{structtimevaltv;structtimezonetz;gettimeofday;printf;printf,printf;return0;}clock_ Gettime()提供纳秒精度。1.头文件 2.编译和链接。

time()提供了秒级的精确度

1、头文件 <time.h>
2、函数原型
time_t time(time_t * timer) 
函数返回从UTC1970-1-1 0:0:0开始到现在的秒数

用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。

#include <time.h>
#include <stdio.h>
int main(void)
{
    time_t t; 
    t = time(NULL);
    printf("The number of seconds since January 1, 1970 is %ld
",t);
    
    return 0;
} 

#include <stdio.h>
#include <stddef.h>
#include <time.h>
int main(void)
{
    time_t timer;//time_t就是long int 类型
    struct tm *tblock;
    timer = time(NULL);//这一句也可以改成time(&timer);
    tblock = localtime(&timer);
    printf("Local time is: %s
",asctime(tblock));
    
    return 0;
}

gettimeofday()提供了微秒级的精确度

1、头文件 <time.h>
2、函数原型
int gettimeofday(struct timeval *tv, struct timezone *tz); 

gettimeofday()会把目前的时间由tv所指的结构返回,当地时区的信息则放到tz所指的结构中(可用NULL)。
参数说明:
    timeval结构定义为:
    struct timeval
    {
        long tv_sec; /*秒*/
        long tv_usec; /*微秒*/
    };
    timezone 结构定义为:
    struct timezone
    {
        int tz_minuteswest; /*和Greenwich 时间差了多少分钟*/
        int tz_dsttime; /*日光节约时间的状态*/
    };
    上述两个结构都定义在/usr/include/sys/time.h。tz_dsttime 所代表的状态如下
        DST_NONE /*不使用*/
        DST_USA /*美国*/
        DST_AUST /*澳洲*/
        DST_WET /*西欧*/
        DST_MET /*中欧*/
        DST_EET /*东欧*/
        DST_CAN /*加拿大*/
        DST_GB /*大不列颠*/
        DST_RUM /*罗马尼亚*/
        DST_TUR /*土耳其*/
        DST_AUSTALT /*澳洲(1986年以后)*/
 
返回值: 成功则返回0,失败返回-1,错误代码存于errno。附加说明EFAULT指针tv和tz所指的内存空间超出存取权限。
#include<stdio.h>
#include<sys/time.h>
int main(void)
{
    struct timeval tv;
    struct timezone tz;

    gettimeofday(&tv, &tz);

    printf("tv_sec; %d
",tv.tv_sec);
    printf("tv_usec; %d
",tv.tv_usec);

    printf("tz_minuteswest; %d
",tz.tz_minuteswest);
    printf("tz_dsttime, %d
",tz.tz_dsttime);

    return 0;
}

clock_gettime( ) 提供了纳秒级的精确度

1、头文件 <time.h>
2、编译&链接。在编译链接时需加上 -lrt ;因为在librt中实现了clock_gettime函数
3、函数原型
int clock_gettime(clockid_t clk_id, struct timespect *tp);
    参数说明:
    clockid_t clk_id 用于指定计时时钟的类型,有以下4种:
        CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户该成其他,则对应的时间相应改变
        CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
        CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
        CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
    struct timespect *tp用来存储当前的时间,其结构如下:
        struct timespec
        {
            time_t tv_sec; /* seconds */
            long tv_nsec; /* nanoseconds */
        };
    返回值。0成功,-1失败

#include<stdio.h>
#include<time.h>
int main()
{
    struct timespec ts;

    clock_gettime(CLOCK_REALTIME, &ts);
    printf("CLOCK_REALTIME: %d, %d
", ts.tv_sec, ts.tv_nsec);

    clock_gettime(CLOCK_MONOTONIC, &ts);//打印出来的时间跟 cat /proc/uptime 第一
个参数一样
    printf("CLOCK_MONOTONIC: %d, %d
", ts.tv_sec, ts.tv_nsec);

    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
    printf("CLOCK_PROCESS_CPUTIME_ID: %d, %d
", ts.tv_sec, ts.tv_nsec);

    clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);
    printf("CLOCK_THREAD_CPUTIME_ID: %d, %d
", ts.tv_sec, ts.tv_nsec);

    printf("%d
", time(NULL));

    return 0;
}
/proc/uptime里面的两个数字分别表示: 
the uptime of the system (seconds), and the amount of time spent in idle process (seconds). 
把第一个数读出来,那就是从系统启动至今的时间,单位是秒

from : http://blog.csdn.net/sunlylorn/article/details/6313278

免责声明:文章转载自《time,gettimeofday,clock_gettime》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇win8中如何禁用屏幕旋转的快捷键js将阿拉伯数字转换成汉字大写下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ATM管理系统(C语言)

1. 作业信息 这个作业属于哪个课程 软件工程 这个作业要求在哪里 作业要求 学号 3180701312 2.题目 编写一个ATM管理系统,语言不限,要求应包括以下主要功能: (1)开户,销户 (2)查询账户余额 (3)存款 (4)取款 (5)转账(一个账户转到另一个账户)等... 3. 代码提交与运行截图 3.1 源代码 (1)头文件...

C语言分配4k对齐内存

分配内存,按4k字节对齐。亦即分配的内存指针指向的地址,低12位(二进制)均为0。 假设要分配size字节内存。基本思路就是先分配size+4k-1字节的内存,然后在起始的4k字节里,找到4k对齐的那个地址(即低12位为0),作为对齐内存首地址,返回。 当然为了避免内存泄漏,要保留初始分配的内存地址,在使用完内存后,需要free掉分配的所有内存。 #inc...

详解2进制,10进制,16进制,8进制,36进制

本篇介绍C/C++语言中的进制的概念,主要介绍2进制、10进制、16进制,这三种是编程时必须掌握的也是最经常使用的。另外,介绍8进制和36进制,当中 36进制在实际project项目中会遇到。 (本文选自《C/C++学习指南》。邵发。附录“2进制,10进制,16进制”)讲2进制、10进制、16进制的视频教程,点击观看  权利声明:作者拥有本书的所有权利。...

[c/c++] programming之路(7)、数据类型转换、偷钱小程序、进制转换

一、数据类型转换 1 #include<stdio.h> 2 //某些场合,必须进行数据类型转换,以匹配调用 3 void main0(){ 4 printf("%f",1);//printf不管你是什么类型,解析失败就是0 0.000000 5 printf(" %d",1.0);//0 6...

C语言精要总结-内存地址对齐与struct大小判断篇

在笔试时,经常会遇到结构体大小的问题,实际就是在考内存地址对齐。在实际开发中,如果一个结构体会在内存中高频地分配创建,那么掌握内存地址对齐规则,通过简单地自定义对齐方式,或者调整结构体成员的顺序,可以有效地减少内存使用。另外,一些不用边界对齐、可以在任何地址(包括奇数地址)引用任何数据类型的的机器,不在本文讨论范围之内。 什么是地址对齐 计算机读取或者写入...

c++拓展register寄存器

寄存器----硬件和软件打交道的接口,这上面装了android,亦或是 windows,linux就能和相关的操作系统设备打交道 早期硬件性能并不很快时,为了提高程序运行的效率,会声明一个寄存器变量,这样一来相当于埋好了“伏笔”,省去了现场开辟空间,再赋值的麻烦 register int a = 10 但是C语言寄存器变量没有地址一说,所以这类写法是...