linux下获取不同精度的时间的办法
经常需要获取系统时间以作为生成随机数的种子,因此总结了三种获取不同精度的系统时间的方法
time(秒级)
/*
time_t time(time_t* tloc);
tloc:
传出参数,如果不为空的话,返回的时间还会存储在tloc里
*/
#include <time.h>
time(NULL); //返回当前时间距1970-01-01的秒数
gettimeofday(微秒级)
/*
int gettimeofday(struct timeval *tv, struct timezone *tz);
tv:
传出参数,结构体定义如下:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
tz:
timezone,仅获取时间的话为NULL即可
*/
#include <sys/time.h>
struct timeval *tv;
gettimeofday(tv, NULL);
clock_gettime(纳秒级)
/*
int clock_gettime(clockid_t clk_id, struct timespec* tp);
clk_id:
CLOCK_MONOTONIC:从某个时间点开始的偏移时间(不可被人为设置)
CLOCK_REALTIME:系统实时时间(可以被人为设置)
更多clk_id介绍参考man手册
tp:
传出参数,结构体定义如下:
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
*/
#include <time.h>
struct timespec* tp;
clock_gettime(CLOCK_MONOTONIC, tp);