error_code vs errno

时间:2013-04-05 05:57:08

标签: c++ c++11 error-handling errno

我正在学习C ++ 11标准。我想了解error_code和errno是否相互关联?如果是,那怎么样? 如果没有那么我应该在哪些条件下设置errno以及在哪些条件下设置error_code?

我做了一个小测试程序来理解这一点,但仍然有点困惑。请帮忙。

#include <iostream>
#include <system_error>
#include <thread>
#include <cstring>
#include <cerrno>
#include <cstdio>

using namespace std;

int main()
{
    try
    {
        thread().detach();
    } catch (const system_error & e) {
        cout<<"Error code value - "<<e.code().value()<<" ; Meaning - "<<e.what()<<endl;
        cout<<"Error no. - "<<errno<<" ; Meaning - "<<strerror(errno)<<endl;
    }
}

Output -
Error code value - 22 ; Meaning - Invalid argument
Error no. - 0 ; Meaning - Success

1 个答案:

答案 0 :(得分:6)

errno被那些记录它们作为遇到错误的副作用的函数使用 - 这些函数是从不抛出异常的C库或OS函数。当您使用文档库设备抛出该异常时,C ++标准库使用system_error。完全分开。最后,阅读你的文档!