GNU/Linux >> Linux の 問題 >  >> Linux

ユーザー定義の errno 範囲値 (POSIX または Linux 固有)

実際の errno 値は、C および C++ 標準では定義されていません。そのため、特定の (正の) 整数を返し、それが実装で使用される整数と衝突しないことを保証する方法はありません。C 標準で必要なマルコは次の 3 つだけです。

C11 ドラフト、7.5 エラー

<ブロック引用>

マクロは

エドム
EILSEQ
エレンジ

int 型、明確な正の値を持つ整数定数式に展開され、#if 前処理ディレクティブでの使用に適しています。

だからあなたは他の errno を知らない 値は実装で定義されます。

errno 値は、標準 C および POSIX では正の整数です。そのため、負の値を持つ独自の列挙を使用して、独自のエラー番号を定義できます。ただし、strerror/perror インターフェイスは使用できません。したがって、独自のエラー番号を解釈するには、strerror/perror の追加のラッパーが必要になる場合があります。

次のようなもの:

enum myErrors{
ERR1 = -1,
ERR2 = -2,
...
ERR64 = -64
};

char *my_strerror(int e)
{
   if (e>=ERR1 && e<=ERR2)
      return decode_myerror(e); // decode_myerror can have a map for  
                                //your error numbers and return string representing 'e'.
   else
      return strerror(e);
}

perror の同様のもの .

errno も設定する必要があることに注意してください 0 まで errno を確認するために「open-resource」を呼び出す前に 実際に関数によって設定されました。

このような状況では、標準の errno を完全に避け、独自のエラー列挙を定義します。 「オープン リソース」が複雑すぎず、エラー コードが返される可能性が高すぎる場合は、これを行うことができます。


Linux
  1. Posixとは正確には何ですか?

  2. $ replyが数値の範囲内にあるかどうかを確認しますか?

  3. フィールド内の重複する値を削除しますか?

  1. Gnu‑makeをPosix Makeの動作に制限しますか?

  2. 値のリストをBashスクリプトにパイプしますか?

  3. どのBashが実行されていますか?

  1. POSIX とはどういう意味ですか?

  2. データファイルで一意の値を見つける

  3. errno をニーモニックとして出力しますか?