有没有办法在多线程应用程序中安全地使用errno?

时间:2009-01-16 07:46:50

标签: c errno

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

2 个答案:

答案 0 :(得分:35)

如果标准库是多线程识别的,那么它可能有#defineerrno更改为函数调用,该函数调用返回线程局部错误返回值。但是,要使用此功能,您通常必须包含<errno.h>,而不是依赖于extern声明。

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

答案 1 :(得分:18)

man errno说:

  

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