36

如果您正在编写一个使用系统/库调用的多线程应用程序,该调用利用 errno 来指示错误类型,是否有一种安全的方法来使用 errno?如果没有,是否有其他方法来指示发生的错误类型,而不仅仅是发生了错误?

4

2 回答 2

36

如果您的标准库支持多线程,那么它可能会#define更改errno为返回线程本地错误返回值的函数调用。但是,要使用它,您通常必须包含<errno.h>,而不是依赖于extern声明。

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

于 2009-01-16T07:49:26.657 回答
19

man errno说:

errno 由 ISO C 标准定义为 int 类型的可修改左值,不得显式声明;errno 可能是一个宏。errno 是线程本地的;在一个线程中设置它不会影响它在任何其他线程中的值。

于 2009-01-16T08:54:40.253 回答