在 Unix 上,我应该对 errno 使用 system_category 还是 generic_category ?

发布于 2024-12-06 08:39:36 字数 544 浏览 0 评论 0原文

C++0x 有两个预定义的 error_category 对象:generic_category()system_category()。据我所知,到目前为止, system_category() 应该用于操作系统返回的错误, generic_category() 应该用于 generic_category() 中找到的通用值code>std::errc,对应于errno值。

但是,在类 Unix 系统上应该做什么,其中 errno是操作系统返回的错误?我应该使用 system_category() (这在非类 Unix 系统上是错误的,需要 #ifdef),还是应该使用 generic_category()< /code> (对于非标准 errno 值,在类 Unix 系统上这会是错误的)?

C++0x has two predefined error_category objects: generic_category() and system_category(). From what I have understood so far, system_category() should be used for errors returned by the operating system, and generic_category() should be used for the generic values found in std::errc, which correspond to errno values.

However, what should be done on Unix-like systems, where errno values are the errors returned by the operating system? Should I use system_category() (which would be wrong on non-Unix-like systems, needing an #ifdef), or should I use generic_category() (which would be wrong on Unix-like systems for non-standard errno values)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

羁〃客ぐ 2024-12-13 08:39:36

您应该像 C++ 标准库函数一样使用 system_category() 报告操作系统(任何操作系统,包括基于 POSIX 的操作系统,例如 Unix)的错误 - 请参阅下面的 C++11 标准引用:

17.6.5.14 错误代码的值[value.error.codes]

1 C++ 标准库中的某些函数通过 std::error_code (19.5.2.1) 对象报告错误。 那个
对于源自操作的错误,对象的category()成员应返回std::system_category()
system
,或对源自错误的实现定义的 error_category 对象的引用
别处。实现应为每个错误类别定义 value() 的可能值。
[示例:对于基于 POSIX 的操作系统,鼓励实现定义
std::system_category() 值与 POSIX errno 值相同,并具有定义的附加值
通过操作系统的文档。不基于操作系统的实现
鼓励 POSIX 定义与操作系统值相同的值。对于这样的错误
不是源自操作系统,实现可以提供关联值的枚举。
——示例结束]

You are meant to report errors from OS (any one, including POSIX-based OSes such as Unix) using system_category() as C++ standard library functions do - see the quote from C++11 standard below:

17.6.5.14 Value of error codes [value.error.codes]

1 Certain functions in the C++ standard library report errors via a std::error_code (19.5.2.1) object. That
object’s category() member shall return std::system_category() for errors originating from the operating
system
, or a reference to an implementation-defined error_category object for errors originating
elsewhere. The implementation shall define the possible values of value() for each of these error categories.
[ Example: For operating systems that are based on POSIX, implementations are encouraged to define the
std::system_category() values as identical to the POSIX errno values, with additional values as defined
by the operating system’s documentation. Implementations for operating systems that are not based
on POSIX are encouraged to define values identical to the operating system’s values. For errors that do
not originate from the operating system, the implementation may provide enums for the associated values.
—end example ]

青巷忧颜 2024-12-13 08:39:36

除非您实际上是操作系统(或报告操作系统特定功能的错误),否则不应使用 system_category。类别描述了错误的来源,而不一定是错误代码的含义。因此,system_category 中的可能错误代码集与 generic_category 相同是完全合法的。

You should not use system_category unless you are in fact the operating system (or reporting an error from an OS-specific function). The category describes where the error originates from, not necessarily what the error code means. So it is perfectly legitimate to have the set of possible error codes from system_category be the same as generic_category.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文