定义库函数的errno值

时间:2011-10-27 09:50:40

标签: c linux

我正在写一个小型库来处理与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的地狱并找到报告错误的另一种方式(如不同的返回值)?

2 个答案:

答案 0 :(得分:1)

您应该区分预期设备应答(如ACK和NACK)与一般意外系统故障(如超时,发送失败等)之间的返回值。我建议在成功时返回0,在NACK上返回1,在系统故障时返回-1 + errno。

答案 1 :(得分:1)

查看the standard以获取errno的列表。就个人而言,我会远离errno,并使用单独的参数等。

在您的情况下该函数不会返回任何有用的内容,因此您可以使用返回值作为成功(0)或错误类型(!0)的指示。