内核:2.6.11 32位 x86
获取当前时间可通过 xtime 变量获得,它是 struct timespec 类型,此类型是秒与纳秒结构:
[C++] 纯文本查看 复制代码
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
但是不推荐直接使用该变量,因为很难原子性的访问上面的两个成员,所以内核提供了 current_kernel_time() 这个函数,该函数实现如下(kernel/time.c):
[C++] 纯文本查看 复制代码
inline struct timespec current_kernel_time(void)
{
struct timespec now;
unsigned long seq;
do {
seq = read_seqbegin(&xtime_lock);
now = xtime;
} while (read_seqretry(&xtime_lock, seq));
return now;
}
上面函数使用顺序锁保证了原子性读取 xtime 变量。
测试代码和一个类似的函数 do_gettimeofday() 可参考:http://www.groad.net/bbs/read.php?tid-1222.html |