glibc代码走读笔记(一)

最近在整理底层库,遇到了不少问题都需要和glibc打交道,甚至内核的系统调用有关。
这里将碰到的不熟悉的地方和有疑问的地方都记录下,方便交流和查看。


首先从函数查找开始,不知道其他人是如何开始看glibc代码的,我看glibc是因为有函数实现不清,搞不懂原理。
那么首先要查找函数,例如tzset函数,如果直接去按这个关键去搜,发现搜不到这个tzset的函数实现,但是搜到这么一个东西:


weak_alias(__tzset,  tzset )
然后发现对应有这么一个函数,
void _tzset(void )
{
      __libc_lock_lock (tzset_lock);
      tzset_internal(1,1);
      ......


}


从实现上看,已经很明显了这个 __tzset就是tzset的真正实现。
那么这个 weak_alias的意思是什么呢?有什么作用?


暂且不管,由于tzset是为了刷新timezone这个全局变量的,而这个全局变量是由c库提供的,所以我想看看这个值是在哪里赋值的,这样代码肯定更清晰。
但是搜索之后发现根本没有timezone这个单独的全部配的全局变量的赋值,只有类似的__timezone的一个全局变量。
其定义为
long int __timezone=0L;
与此同时,也发现了在其定义下面有类似的


weak_alias(__timezone,timezone)
的声明。
从这里已经可以基本推测出这个 weak_alias的作用和意义了。
其实就是为了保护libc的实现,同时呢可以提供一种能让外部自定义libc库中函数的途径。





























你可能感兴趣的:(C/C++,代码验证学习,Linux中C/C++编程)