Threading
errno 的实现
IEEE Std 1003.1-2024 (POSIX) 中对于 errno 的定义如下:
The lvalue to which the macro errno expands is used by many functions to return error values.
在更早期的 POSIX(Issue 5 及以前)以及 X/Open 文档中,曾经规定 errno
是一个外部变量(extern int errno),但这使得 errno 无法实现线程安全,因为所有线程共享同一个全局变量,
一个线程的系统调用返回的错误码会覆盖另一个线程的值。因此,POSIX Issue 6(即 SUSv3 / IEEE Std 1003.1-2001)
将这一要求删除,改为现在的定义:只要求 errno 是一个展开为 int 类型的可修改左值(modifiable lvalue)的宏。
这为实现者提供了足够的自由度,以支持线程安全的 errno。
ISO C 标准在 C90/C89 时期已经不再要求 errno 是外部变量。