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库中函数的途径。





























  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值