asmlinkage long sys_time(time_t __user *tloc); 这个函数从当前kernel 获得当前的秒数,返回给用户空间
其源码分析如下:
SYSCALL_DEFINE1(time, time_t __user *, tloc)
{
#通过timekeeper 获得当前的秒数
time_t i = get_seconds();
#如果用户空间提供的buf不为null的话,则通过put_user 将秒数写到用户空间的buf中
if (tloc) {
if (put_user(i,tloc))
return -EFAULT;
}
force_successful_syscall_return();
#同时系统调用返回当前的秒数
return i;
}
通过timekeeper 获得当前系统秒数的实现如下:
unsigned long get_seconds(void)
{
struct timekeeper *tk = &tk_core.timekeeper;
return tk->xtime_sec;
}
可见秒数是保存在timekeeper中的xtime_sec中的