Joh*_*han 2 c c++ linux errno i2c
当一个经典的linux c/c ++软件出现问题时,我们会有一个神奇的变量errno,它可以让我们知道出了什么问题.
但这些错误定义在哪里?
让我们举一个例子(它实际上是来自Qt应用程序的一部分,因此是qDebug()).
if (ioctl(file, I2C_SLAVE, address) < 0) {
int err = errno;
qDebug() << __FILE__ << __FUNCTION__ << __LINE__
<< "Can't set address:" << address
<< "Errno:" << err << strerror(err);
....
Run Code Online (Sandbox Code Playgroud)
下一步是查看该错误是什么,以便我们可以决定是退出还是尝试对此问题采取措施.
所以我们可以在这一点上添加一个if或switch.
if (err == 9)
{
// do something...
}
else
{
//do someting else
}
Run Code Online (Sandbox Code Playgroud)
我的问题是在哪里找到"9"代表的错误?我不喜欢我的代码中那种神奇的数字.
/谢谢
tro*_*foe 13
它们通常在/usr/include/errno.h*中定义,并且可以通过包含errno.h来访问:
#include <errno.h>
Run Code Online (Sandbox Code Playgroud)
我在报告错误时写出了errno值及其文本含义,通过strerror()以下方式获取文本含义:
if (something_went_wrong)
{
log("Something went wrong: %s (%d)", strerror(errno), errno);
return false;
}
Run Code Online (Sandbox Code Playgroud)
但是,从Linux shell中,您可以使用该perror实用程序找出不同的errno值的含义:
$ perror 9
OS error code 9: Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
编辑:您的代码应更改为使用符号值:
if (err == EBADF)
{
// do something...
}
else
{
//do someting else
}
Run Code Online (Sandbox Code Playgroud)
编辑2:*在Linux下,至少,实际值是在/usr/include/asm-generic/{errno,errno-base}.h其他地方定义的,如果你想查看它们,找到它们会有点痛苦.