2011-10-27 6 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、エラーの場合は-1です。私はerrnoに設定する必要がある値を定義する必要があります。

-Nack received:このケースに合ったエラーは見つかりませんでした。

- 不思議な答え:EBADMSG。

-Timeout:ETIMEまたはETIMEDOUT。

-終了:EIO?

NACKの場合はどのようなエラーを使用する必要がありますか?それ以外の場合はエラー番号が適切ですか?または、私はerrnoの地獄から離れて、エラーを報告する別の方法(別の戻り値のようなもの)を見つけるべきですか?

答えて

1

the standardを参照してください。errnoのリスト。個人的に私はerrnoから離れ、および機能ははそうあなたが成功の指標として戻り値を使用することができ便利(0)またはタイプのものを返さないあなたのケースになど

別のパラメータを使用しますエラー(!0)。

+0

エラーに負の整数または正の整数を使用しますか?私はまだいくつかのエラーを詳細に報告することができます(sendコマンドとgetreply関数の中で、failluresの書き込みと読み取り)。一方、私はおそらく、すべてのfaillureのケースをカバーすることはできませんので、多分私はそれを避ける必要があります。 –

1

予想されるデバイスの回答(ACKやNACKなど)と予期しないシステムの一般的な障害(タイムアウト、失敗した送信など)との間で、戻り値を区別する必要があります。成功すれば0、NACKは1、システム障害は-1 + errnoを返すことをお勧めします。