我无法理解c ++中的errno库是为了什么?它中设置了哪些类型的错误,如何知道哪个数字代表哪个错误?
是否会影响程序执行?
答案 0 :(得分:11)
errno.h是C ++的C子集的一部分。它由C库使用并包含错误代码。如果对函数的调用失败,则变量“errno”将相应地设置为错误。
如果您使用的是C ++标准库,那将毫无用处。
在C中,您有将errno代码转换为C字符串的函数。如果你的代码是单线程的,你可以使用strerror,否则使用strerror_r(参见http://www.club.cc.cmu.edu/~cmccabe/blog_strerror.html)
例如在C中它的工作原理如下:
int result = call_To_C_Library_Function_That_Fails();
if( result != 0 )
{
char buffer[ 256 ];
strerror_r( errno, buffer, 256 ); // get string message from errno, XSI-compliant version
printf("Error %s", buffer);
// or
char * errorMsg = strerror_r( errno, buffer, 256 ); // GNU-specific version, Linux default
printf("Error %s", errorMsg); //return value has to be used since buffer might not be modified
// ...
}
当您使用C库或C中的OS库时,当然可能需要使用C ++。例如,如果您在Unix系统中使用sys / socket.h API。
使用C ++,如果您正在编写C API调用的包装器,您可以使用自己的C ++异常,这些异常将使用errno.h从C API调用错误代码中获取相应的消息。