如果您正在编写一个使用系统/库调用的多线程应用程序,该调用利用 errno 来指示错误类型,是否有一种安全的方法来使用 errno?如果没有,是否有其他方法来指示发生的错误类型,而不仅仅是发生了错误?
Erik Öjebo
问问题
7942 次
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 回答