这个函数以timeval 结构体返回当前系统时间和当前的时区
其源码分析如下:
SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv,
struct timezone __user *, tz)
{
#这里用likely修饰可以知道大部分情形下下tv 不为null,所以这里会调用do_gettimeofday 返回时间
#然后通过copy_to_user 将ktv中的值赋值到用户空间buffer tv中
if (likely(tv != NULL)) {
struct timeval ktv;
do_gettimeofday(&ktv);
if (copy_to_user(tv, &ktv, sizeof(ktv)))
return -EFAULT;
}
#这个函数也可以获取当前的时区信息,但是不常用,kernel中的时区信息是保存在sys_tz这个全局变量中
if (unlikely(tz != NULL)) {
if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
return -EFAULT;
}
return 0;
}
获取kernel 时间的函数如下:
void do_gettimeofday(struct timeval *tv)
{
struct timespec64 now;
getnstimeofday64(&now);
tv->tv_sec = now.tv_sec;
tv->tv_usec = now.tv_nsec/1000;
}
版权声明:本文为tiantao2012原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。