c-error_code:如何设置和检查errno
作者:互联网
我试图了解在调用在Linux上设置errno的C函数时应使用的类别.
我不确定POSIX是否定义了所有可能的错误代码,因此我很想使用system_category.
但是我以后想在代码中处理通用条件,所以我想做这样的事情:
std::error_code ec;
some_func(some_path, ec);
if (ec) {
if (ec == std::errc::file_exists) {
// special handling
}
return ec;
}
要在some_func()中设置错误代码,我希望这样进行:
ec.assign(EEXIST, std::system_category());
主要基于此讨论:
> <system_error> categories and standard/system error codes
>以及@ niall-douglas提供的代码示例:
06002
— 07001
但是,在Linux上,使用GCC 6.1.1,我有:
> std :: error_code(EEXIST,std :: system_category())== std :: errc :: file_exists返回false
> std :: error_code(EEXIST,std :: generic_category())== std :: errc :: file_exists返回true
我期望errno system_category与std :: errc条件具有可比性.
这意味着我的初始代码会检查如果我不使用泛型类别,则(ec == std :: errc :: file_exists)是否不起作用.
这是预期的行为吗?
解决方法:
这是最近在最新的GCC 6、7和8点版本中修复的错误.如果您使用的是最新发行版,它将按预期工作.参见https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60555.
标签:error-code,c,c11,linux 来源: https://codeday.me/bug/20191010/1888665.html