Threading

errno 的实现

| Development | #FreeBSD | #POSIX | #C | #Threading

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 是外部变量。

阅读全文…( 本文约 1554 字,阅读大致需要 4 分钟 )