【发布时间】:2010-10-01 18:37:56
【问题描述】:
如果您正在编写一个使用系统/库调用的多线程应用程序,该调用利用 errno 来指示错误类型,那么是否有一种安全的方式来使用 errno?如果没有,是否有其他方式来指示发生的错误类型,而不仅仅是发生了错误?
【问题讨论】:
如果您正在编写一个使用系统/库调用的多线程应用程序,该调用利用 errno 来指示错误类型,那么是否有一种安全的方式来使用 errno?如果没有,是否有其他方式来指示发生的错误类型,而不仅仅是发生了错误?
【问题讨论】:
如果您的标准库支持多线程,那么它可能有一个 #define 将 errno 更改为返回线程本地错误返回值的函数调用。但是,要使用它,您通常必须包含<errno.h>,而不是依赖extern 声明。
我发现一篇文章 Thread-safety and POSIX.1 解决了这个问题。
【讨论】:
man errno 说:
errno 由 ISO C 标准定义 成为类型的可修改左值 int,并且不能显式 宣布; errno 可能是一个宏。错误号 是线程本地的;将其设置为一个 线程不影响其值 在任何其他线程中。
【讨论】: