struct timespec 和 struct timeval

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

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


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

如果需要更高的时间精确度,就需要struct
timespec 和 struct timeval来处理:

一、struct timespec 定义:

typedef long time_t;
#ifndef _TIMESPEC
#define _TIMESPEC
struct
timespec {
time_t tv_sec; // seconds
long tv_nsec; // and nanoseconds

};
#endif
struct timespec有两个成员,一个是秒,一个是纳秒, 所以最高精确度是纳秒。
一般由函数int
clock_gettime(clockid_t, struct timespec *)获取特定时钟的时间,常用如下4种时钟:
CLOCK_REALTIME
统当前时间,从1970年1.1日算起
CLOCK_MONOTONIC 系统的启动时间,不能被设置
CLOCK_PROCESS_CPUTIME_ID
本进程运行时间
CLOCK_THREAD_CPUTIME_ID 本线程运行时间
struct tm *localtime(const time_t
*clock);  //线程不安全
struct tm* localtime_r( const time_t* timer, struct
tm* result );//线程安全
size_t strftime (char* ptr, size_t maxsize, const char*
format,const struct tm* timeptr );

二、struct timeval 定义:

struct timeval {
time_t tv_sec; // seconds
long
tv_usec; // microseconds
};
struct timezone{
int
tz_minuteswest; //miniutes west of Greenwich
int tz_dsttime; //type of
DST correction
};

struct timeval有两个成员,一个是秒,一个是微秒, 所以最高精确度是微秒。
一般由函数int gettimeofday(struct
timeval *tv, struct timezone *tz)获取系统的时间

三、 对照样例:

 1 #include<stdio.h>
2 #include<time.h>
3 #include<sys/time.h>
4
5 void nowtime_ns()
6 {
7 printf("---------------------------struct timespec---------------------------------------\n");
8 printf("[time(NULL)] : %ld\n", time(NULL));
9 struct timespec ts;
10 clock_gettime(CLOCK_REALTIME, &ts);
11 printf("clock_gettime : tv_sec=%ld, tv_nsec=%ld\n", ts.tv_sec, ts.tv_nsec);
12
13 struct tm t;
14 char date_time[64];
15 strftime(date_time, sizeof(date_time), "%Y-%m-%d %H:%M:%S", localtime_r(&ts.tv_sec, &t));
16 printf("clock_gettime : date_time=%s, tv_nsec=%ld\n", date_time, ts.tv_nsec);
17 }
18 void nowtime_us()
19 {
20 printf("---------------------------struct timeval----------------------------------------\n");
21 printf("[time(NULL)] : %ld\n", time(NULL));
22 struct timeval us;
23 gettimeofday(&us,NULL);
24 printf("gettimeofday: tv_sec=%ld, tv_usec=%ld\n", us.tv_sec, us.tv_usec);
25
26 struct tm t;
27 char date_time[64];
28 strftime(date_time, sizeof(date_time), "%Y-%m-%d %H:%M:%S", localtime_r(&us.tv_sec, &t));
29 printf("gettimeofday: date_time=%s, tv_usec=%ld\n", date_time, us.tv_usec);
30 }
31
32 int main(int argc, char* argv[])
33 {
34 nowtime_ns();
35 printf("\n");
36 nowtime_us();
37 printf("\n");
38 return 0;
39 }

nowtime.cpp

执行结果:

$tt
---------------------------struct
timespec---------------------------------------
[time(NULL)] :
1400233995
clock_gettime : tv_sec=1400233995,
tv_nsec=828222000
clock_gettime : date_time=2014-05-16 17:53:15,
tv_nsec=828222000

---------------------------struct
timeval----------------------------------------
[time(NULL)] :
1400233995
gettimeofday: tv_sec=1400233995, tv_usec=828342
gettimeofday:
date_time=2014-05-16 17:53:15, tv_usec=828342

over

时间: 2024-10-04 17:57:54

struct timespec 和 struct timeval的相关文章

struct inode 和 struct file

1.struct inode──字符设备驱动相关的重要结构介绍 内核中用inode结构表示具体的文件,而用file结构表示打开的文件描述符.Linux2.6.27内核中,inode结构体具体定义如下:struct inode {struct hlist_node    i_hash;struct list_head    i_list;struct list_head    i_sb_list;struct list_head    i_dentry;unsigned long        i

struct timeval 和 struct timespec

struct timeval { time_t tv_sec; suseconds_t tv_usec; }; 测试代码如下: #include <stdio.h> #include <sys/time.h> #include <time.h> int gettimeofday(struct timeval *tv, struct timezone *tz); int main(int argc,char * argv[]){ struct timeval tv; wh

使用未定义的 struct“timespec” 解决方案

在头文件中添加如下定义: #ifndef _CRT_NO_TIME_T struct timespec { time_t tv_sec;  // Seconds - >= 0 long   tv_nsec; // Nanoseconds - [0, 999999999] }; #endif 该代码摘自:time.h文件,不清楚为什么直接包含time.h文件仍然找不到定义 原文地址:http://blog.51cto.com/fengyuzaitu/2103886

struct和typedef struct

struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是struct Student的别名.Stu==struct Student 另外这里也可以不写Student(于是也不能struct

struct msghdr和struct cmsghdr

struct msghdr和struct cmsghdr http://blog.csdn.net/wsllq334/article/details/6977039 structdescriptorcredentialsfilesocket数据结构 理解struct msghdr 当我第一次看到他时,他看上去似乎是一个需要创建的巨大的结构.但是不要怕.其结构定义如下: struct msghdr { void *msg_name; socklen_t msg_namelen; struct io

struct和typedef struct彻底明白了

struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是struct Student的别名.Stu==struct Student 另外这里也可以不写Student(于是也不能struct

typedef和define,const,struct和typedef struct

先看几个例子 (1) struct{ int x; int y; }test1; 好,定义了 结构 test1, test1.x 和 test1.y 可以在语句里用了. (2) struct test {int x; int y; }test1; 好,定义了 结构 test1, test1.x 和 test1.y 可以在语句里用了. 与 1 比,省写 了 test (3) typedef struct test {int x; int y; }text1,text2; 只说了 这种结构 的(类型

linux内核内存分配(二、struct slab和struct kmem_cache)

前一篇bloglinux内核内存分配(一.基本概念)主要是分析linux内核内存的分配和物理页分配函数接口.但是在实际的操作中,不一定所有内存申请都需要一个物理页,很多只是需要分配几K大小的内存就可以.所以就需要更小的内存分配函数.刚开始看这个有点不懂,不过懂了就很简单了.哈哈. slab思想 摘抄<深入linux设备驱动程序内核机制>的一段话:slab分配器的基本思想是,先利用页面分配器分配出单个或者一组连续的物理页面,然后在此基础上将整块页面分割成多个相等的小内存单元,以满足小内存空间分配

转载:struct和typedef struct彻底明白了

struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是struct Student的别名.Stu==struct Student 另外这里也可以不写Student(于是也不能struct