linux中C语言获取高精度时钟gettimeofday函数

前言:
    在开发中,很多时候需要知道各个函数或者是某些设备对命令的操作用时,因此需要用到 gettimeofday 来获取当前时钟。

一,函数说明

#include 

int gettimeofday(struct timeval *tv, struct timezone *tz);

注意:

1.精确级别,微妙级别
        2.受系统时间修改影响
        3.返回的秒数是从1970年1月1日0时0分0秒开始

其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果:

结构体timeval的定义为:

点击(此处)折叠或打开

    struct timeval
    {
        long int tv_sec;     // 秒数
        long int tv_usec;     // 微秒数
    }

它获得的时间精确到微秒(1e-6 s)量级

结构体timezone的定义为:

点击(此处)折叠或打开

    struct timezone
    {
        int tz_minuteswest;/*格林威治时间往西方的时差*/
        int tz_dsttime;    /*DST 时间的修正方式*/
    }

timezone 参数若不使用则传入NULL即可。
            其中 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。

ERRORS
           EFAULT One of tv or tz pointed outside the accessible address space.
           EINVAL Timezone (or something else) is invalid.

二,实例

点击(此处)折叠或打开 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <sys/time.h>
 5 int    time_substract(struct timeval *result, struct timeval *begin,struct timeval *end)
 6 {
 7     if(begin->tv_sec > end->tv_sec)    return -1;
 8     if((begin->tv_sec == end->tv_sec) && (begin->tv_usec > end->tv_usec))    return -2;
 9     result->tv_sec    = (end->tv_sec - begin->tv_sec);
10     result->tv_usec    = (end->tv_usec - begin->tv_usec);
11
12     if(result->tv_usec < 0)
13     {
14         result->tv_sec--;
15         result->tv_usec += 1000000;
16     }
17     return 0;
18 }
19 int main(int argc, char **argv)
20 {
21     struct timeval start,stop,diff;
22     memset(&start,0,sizeof(struct timeval));
23     memset(&stop,0,sizeof(struct timeval));
24     memset(&diff,0,sizeof(struct timeval));
25     gettimeofday(&start,0);
26     //做你要做的事...
27     printf("hello world\n");
28     gettimeofday(&stop,0);
29     time_substract(&diff,&start,&stop);
30     printf("Total time : %d s,%d us\n",(int)diff.tv_sec,(int)diff.tv_usec);
31 }

操作结果:

转载自:http://blog.chinaunix.net/uid-28458801-id-4214306.html

时间: 2024-10-25 19:08:22

linux中C语言获取高精度时钟gettimeofday函数的相关文章

linux 中的进程wait()函数

转载自:http://blog.sina.com.cn/s/blog_7776b9d3010144f9.html 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程. 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为他的父进程-- 一个进程在调用exit

(二十)linux中i2c的ioctl,write,read函数的使用

一.ioctl函数的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned long arg);cmd有I2C_SLAVE,I2C_SLAVE_FORCE,I2C_TENBIT,I2C_S3C2410_SET_SPEED几个选项:I2C_SLAVE:对应的arg取值为I2C从机地址,用来设定I2C从机地址: I2C_SLAVE_FORCE:对应的arg取值为I2C从机地址,用来修改I2C从机地址: I2C_TENBIT:对应的

Linux中与环境变量相关的函数

1.在终端可以通过env.set命令查看当前的环境变量 2.通过main函数中的第三个参数可以得到当前进程的环境变量列表 int main(int argc , char *argv[] , char *env[]); 其中argv和env是一个指针数组,数组的最后一个元素为NULL 3.打印当前进程的环境变量 int main(int argc , char *argv[] , char *env[]){ char **p = env; while(*p){ printf("%s\n"

/*基本算法实现*/Linux中string.h里几个函数的实现

string.h extern int strcmp(const char*,const char*); extern char* strcpy(char*,const char*); string.c int strcmp(const char *cs, const char *ct) { unsigned char c1, c2; while (1) { c1 = *cs++; c2 = *ct++; if (c1 != c2) return c1 < c2 ? -1 : 1; if (!c

Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。

倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offsetof 1.1 offsetof介绍 定义:offsetof在linux内核的include/linux/stddef.h中定义.#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 说明:获得结构体(TYPE)的变量成员(

linux中时间函数

linux下常用时间类型有四种: time_t . struct   tm. struct  timeval .    struct   timespec 1.time_t   时间函数 time_t  类型在time.h中定义: #ifndef   __TIME__T #define  __TIME_T typedef    long  time_t #endif 可见, time_t 实际上是一个长整型,其值表示从1970年1月1日00时00分00秒(linux系统的Epoch时间)到当前时

Linux时间函数之gettimeofday()函数之使用方法

1.简介: 在C语言中可以使用函数gettimeofday()函数来得到时间.它的精度可以达到微妙 2.函数原型: #include<sys/time.h> int gettimeofday(struct  timeval*tv,struct  timezone *tz ) 3.说明: gettimeofday()会把目前的时间用tv 结构体返回,当地时区的信息则放到tz所指的结构中 4.结构体: 1>timeval struct  timeval{ long  tv_sec;/*秒*/

linux中fork()函数详解[zz]

转载自:http://www.cnblogs.com/york-hust/archive/2012/11/23/2784534.html 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有

练习一下linux中的list函数。

所有的list函数见 include/linux/list.h 自己从 include/linux/list.h 拷贝了一些函数到自己的list.c中, 然后练习了一下. 没有别的目的,就是想熟练一下.毕竟linux内核代码中试用了大量的list函数. list的函数太方便使用了. 文件:list.c 1 #include <stdio.h> 2 // #include <linux/list.h> 3 4 struct list_head { 5 struct list_head