如何在c++中使用errno ?
How do I use errno in C++
我不明白c++中的errno库是干什么用的?其中设置了哪些类型的错误,我如何知道哪个数字代表哪个错误?
是否影响程序执行?
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++中使用它。例如,如果你在Unix系统中使用sys/socket.h API。
对于c++,如果你要对一个C API调用做一个包装,你可以使用你自己的c++异常,它将使用errno.h从你的C API调用错误代码中获得相应的消息。
相关文章:
- 重新定义预定义的 errno 错误消息 (E2BIG)
- Fileno,Errno:"no"是什么意思?(非英语母语)
- UDP 服务器无法发送回复,发送返回 -1,errno 为 22
- 当包含成员函数名为errno和cerrno时,g++7编译错误
- 设置SO_RCVTIMEO时,为什么recv返回-1并且errno=EINTR
- 每当设置了某些数学errno值时,如何引发异常
- Linux 套接字 recv 返回 -1,errno 110 连接超时
- libusb:错误 [submit_bulk_transfer] submiturb 失败错误 -1 errno=2 -
- 为什么从unistd.h调用crypt()函数会将errno设置为ENOENT?
- 使用 gcc 的 -fno-math-errno 可能有什么副作用?
- vwprintf错误处理(ERRNO显示0)
- C++ 套接字 accept() get 资源死锁避免了 epoll 的 errno
- C 中ERRNO变量的类型是什么
- Visual Studio 2010 调用 _locking() 失败 (errno = 22) 当文件指针高于 (2^
- setsockopt 返回 -1:errno 设置为 0
- readlink 将 errno 设置为 ENOENT
- qtCreator 错误:无法映射文件,errno=22 文件用于架构x86_64?
- 我的 C file_exists 函数使用统计总是失败,errno = ENOENT
- 绑定插座失败了ERRNO 88
- 编译 fortran 文件"/usr/bin/ld: errno: TLS definition in /lib/libc.so.6"