2011-10-27 38 views
1

我在寫一個小型庫來處理rs232設備的通信。爲庫函數定義errno值

多數的功能寫在描述符中的幾個字節,等待回覆,analise並返回:

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中設置的值。

- 未收到:我找不到適合此情況的任何錯誤。

- 意外的答案:EBADMSG。

-Timeout:ETIME或ETIMEDOUT。

-Send failled:EIO?

我應該爲NACK案例使用什麼樣的錯誤,並且在其他案例中的錯誤編號是否合適?或者我應該呆在地獄之外,並找到另一種方式報告錯誤(如不同的返回值)?

回答

1

查看the standard獲取errno s的列表。我個人從errno遠離,並使用單獨的參數等

在你的情況功能不返回任何有用,所以你可以使用返回值作爲成功的標誌(0)或類型錯誤(!0)。

+0

你會使用負值還是負值來計算錯誤?我仍然在試圖讓我的腦海裏,因爲一些錯誤可以進一步的細節(寫和讀faillures的sendcommand和功能的getreply內)報告。在另一方面,我也許不能涵蓋所有的faillure情況下,也許我應該置身事外。 –

1

你或許應該區分預期設備的答案(如ACK和NACK)和一般突發系統故障之間的返回值(如超時,發送失敗等)。我建議在成功時返回0,在NACK上返回1,在系統失敗時返回-1 + errno。