errno变量

linux中的errno是个线程全局变量,每个线程都维护了一个errno,但是怎么实现的呢?

查看了errno.h头文件,看到各种宏,然后又include了<bits/errno.h>,里面又有define errno (*__errno_location ()),又是各种宏包围着,完全不知道该如何找?各位有没有好的办法推荐下

最后采用了gcc的预编译选项gcc -E ***,查看预编译过的文件,看到errno变成了int a = (*__errno_location ());

这说明起作用的是define errno (*__errno_location ()),查看官方文档:

__errno_location

Name

__errno_location -- address of errno variable

Synopsis

 

int * __errno_location(void);

 

Description

The __errno_location() function shall return the address of the errno variable for the current thread.

__errno_location() is not in the source standard; it is only in the binary standard.

 

内部实现目前没有看到源码,也查了一些其它博客,应该是用

  void *pthread_getspecific(pthread_key_t key);
  int pthread_setspecific(pthread_key_t key, const void *value);

这一族函数实现的,具体的请各位知道的评论里面说下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值