我正在写一个小型库来处理与rs232设备的通信。
大多数函数在描述符中写入几个字节,等待回复,分析并返回:
int demo_function(int fd)
{
if (sendcommand(command)==0)
{
if (getreply(buffer)==0)
{
if (buffer == ACK)
return 0; //Success, returns 0
else if (buffer == NACK)
return -1; //Error, Nack received
else
return -1; //Error, unexpected answer
}
else
return -1; //Error, Timeout
}
else
return -1; //Error, send failled.
}
我想尽可能地遵循标准,所以我成功时返回0,错误时返回-1。我需要定义我应该在errno中设置的值。
-Nack收到:我找不到适合这种情况的任何错误。
- 意想不到的答案:EBADMSG。
-Timeout:ETIME或ETIMEDOUT。
- 发送失败:EIO?
我应该对NACK案例使用什么错误,其他情况下的错误号是否合适?或者我应该留下errno的地狱并找到报告错误的另一种方式(如不同的返回值)?
答案 0 :(得分:1)
您应该区分预期设备应答(如ACK和NACK)与一般意外系统故障(如超时,发送失败等)之间的返回值。我建议在成功时返回0,在NACK上返回1,在系统故障时返回-1 + errno。
答案 1 :(得分:1)
查看the standard以获取errno
的列表。就个人而言,我会远离errno
,并使用单独的参数等。
在您的情况下该函数不会返回任何有用的内容,因此您可以使用返回值作为成功(0)或错误类型(!0)的指示。