猿问

你好,求问关于linux errno问题,如下所示,该如何解决呢?

在多线程中errno定义如下
extern int *__errno_location()
define errno (*__errno_location ())

第一行是声明一个函数__errno_location,返回整形指针,参数没有,
第二行是什么意思,没有看明白,定义errno为什么?
请教达人
只有20分,全送了,谢谢
其实我知道是返回一个地址,主要是那个语法,怎么那么写?

白板的微信
浏览 460回答 2
2回答

江户川乱折腾

errno实际上,并不是我们通常认为的是个整型数值,而是通过整型指针来获取值的。这个整型就是线程安全的。另外,宏之所以这样实现,是因为标准库规定了必须能够通过&errno方式取得保存错误代码的变量的地址,因此 __errno_location()函数的返回值是指针,并把宏定义为解引用函数返回的地址*__errno_location()。如果 __errno_location直接返回int类型,此时就无法取得保存错误代码的变量的地址。

开心每一天1111

使用TLS多线程运行库首先,errno必须成为各个线程的私有成员。在glibc中,errno被定义为一个宏,如下:#define errno (*__errno_location ())函数__errno_location在不同的库版本下有不同的定义,在单线程版本中,它仅直接返回了全局变量errno的地址。而在多线程版本中,不同线程调用__errno_location返回的地址则各不相同。在MSVC中,errno同样是一个宏,其实现方式和glibc类似。
随时随地看视频慕课网APP
我要回答