When something goes wrong in a classic linux c/c++ software we have the magic variable errno that gives us a clue on what just went wrong.
But where is those errors defined?
Let’s take a example (it’s actually a piece from a Qt app, therefore the qDebug()).
if (ioctl(file, I2C_SLAVE, address) < 0) {
int err = errno;
qDebug() << __FILE__ << __FUNCTION__ << __LINE__
<< "Can't set address:" << address
<< "Errno:" << err << strerror(err);
....
The next step is to look at what that errno was so we can decide if we just quit or try to do something about the problem.
So we maybe add a if or switch at this point.
if (err == 9)
{
// do something...
}
else
{
//do someting else
}
And my question is where to find the errors that “9” represents?
I don’t like that kind of magic numbers in my code.
/Thanks
They are generally defined in
/usr/include/errno.h* and are accessible by including errno.h:I write out both the errno value and its textual meaning when reporting an error, getting the textual meaning via
strerror():From a Linux shell, however, you can use the
perrorutility to find out what different errno values mean:EDIT:
Your code should be changed to use the symbolic value:
EDIT 2: * Under Linux, at least, the actual values are defined in
/usr/include/asm-generic/{errno,errno-base}.hand other places, making it a bit of a pain to find them if you want to look at them.