Значение errno
после успешного вызова любой системной функции POSIX не указано, по крайней мере, для Single Unix Specification v6.Вы должны увидеть, был ли open()
успешным (то есть возвращен неотрицательный дескриптор), и проанализировать errno
, только если open()
потерпел неудачу.
Итак, ваш код должен быть:
ERROR_CODES SerialPortLinux::openCommunication()
{
ERROR_CODES error_code;
hComm = open(port_name.c_str(), O_RDWR | O_NOCTTY | O_SYNC);
if (hComm == -1)
{
error_code = getPortErrorCode();
// Treat this error condition somehow
return error_code;
}
return ERROR_CODES::SUCCESS;
}
В вашем конкретном случае, я предполагаю, что операция open()
прошла успешно, но вы все равно получили EAGAIN от errno
, потому что это значение было там с момента последней неудачной операции.