如果您正在编写一个使用系统/库调用的多线程应用程序,该系统/库调用使用errno来指示错误类型,是否有使用errno的安全方法?如果没有,是否有其他方法来指示发生的错误类型而不仅仅是发生了错误?
答案 0 :(得分:35)
如果标准库是多线程识别的,那么它可能有#define
将errno
更改为函数调用,该函数调用返回线程局部错误返回值。但是,要使用此功能,您通常必须包含<errno.h>
,而不是依赖于extern
声明。
我找到了一篇文章Thread-safety and POSIX.1来解决这个问题。
答案 1 :(得分:18)
man errno
说:
errno由ISO C标准定义 是一个可修改的左值类型 int,并且不得明确 声明; errno可能是一个宏。错误号 是线程本地的;将其设置为一个 线程不会影响其值 在任何其他线程中。