2009-01-16 71 views

回答

34

如果您的标准库是多线程感知的,那么它可能有一个#define,它将errno更改为返回线程本地错误返回值的函数调用。但是,要使用此功能,您一般需要包括<errno.h>,而不是依靠extern声明。

我发现了一篇文章Thread-safety and POSIX.1,它解决了这个问题。

+0

谢谢!在/usr/include/bits/errno.h中的快速检查证实,在我的Ubundu机器上,使用线程时,errno确实被定义为per-thread。 – 2009-01-16 08:04:36

16

man errno说:

错误号是由ISO C标准 定义为 int类型的修改的左值,并且不能明确地声明 ; errno可能是一个宏。 errno 是线程局部的;将其设置为一个 线程在任何其他线程中都不会影响其值 。

相关问题