其他分享
首页 > 其他分享> > c-error_code:如何设置和检查errno

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