浅析Linux中的时间编程和实现原理(二)硬件和GLibC库的细节
发布时间:2016-10-31 01:41:20 所属栏目:Linux 来源:网络整理
导读:引子 熟悉了基本的编程方法之后,我们的兴趣就在于,计算机如何实现这一切的呢?在那些应用层 API 和底层系统硬件之间,操作系统和库函数究竟做了些什么? 首先
|
time() 的实现 第一个典型 API 是 time(),我们参考 GlibC2.13 版本的实现。 清单 1.time 的 GlibC 实现
time_t time (time_t *t)
{
INTERNAL_SYSCALL_DECL (err);
time_t res = INTERNAL_SYSCALL (time, err, 1, NULL);//系统调用
return res;
}
可以看到,GlibC 的 time() 函数只是调用了 time 系统调用,来返回时间值。同样,如果我们查看 gettimeofday() 等很多 API,将会发现它们也是仅仅调用了 Linux 的系统调用来完成指定的功能。根据我的分析,下面这些函数都是直接调用了 Linux 的系统调用来完成工作:
查看本栏目更多精彩内容:http://www.bianceng.cn/OS/Linux/ ftime() 的实现 ftime() 在 Glibc 中的代码实现在 sysdeps/unix/bsd/ftime.c,因为在 Linux 系统中 ftime 系统调用已经过时了,目前如果还有调用 ftime() 的应用程序 GLibc 将用 gettimeofday() 来模拟,具体代码如下: 清单 2,ftime 的 GlibC 实现
int ftime (timebuf)
struct timeb *timebuf;
{
struct timeval tv;
struct timezone tz;
if (__gettimeofday (&tv, &tz) < 0) //调用 gettimeofday
return -1;
timebuf->time = tv.tv_sec;
timebuf->millitm = (tv.tv_usec + 500) / 1000;
if (timebuf->millitm == 1000) {
++timebuf->time;
timebuf->millitm = 0; }
timebuf->timezone = tz.tz_minuteswest;
timebuf->dstflag = tz.tz_dsttime;
return 0;
}
timer_create() 的实现 (编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


