すべてのシステムコールエラー番号は一意ですか?

すべてのシステムコールエラー番号は一意ですか?

私はUnixシステムプログラミングプログラムを書いていますが、要件の1つはシステムコールから返される可能性のあるすべてのエラーを処理することです。

したがって、各システムコールに専任する関数を置くよりも、この責任を担う関数を持ちたいと思います。それでは、返されたすべてのエラー番号は一意ですか?そうでない場合、どのような重複領域が存在しますか?

ベストアンサー1

2つの側面があります。システムコールがエラーを通知する方法とエラーが発生する方法が報告されます。

ほとんどのシステムコールは-1を返すことでエラーが発生したことを示しますが、これは完全に普遍的なものではありません(たとえば、一部のシステムコールは常に成功しますgetpid)。

エラーが発生したことがわかっている場合、エラーコードは常にerrno¹にあります。持つ標準値は次のように定義されます。errno.h、各UNIXバリアントには独自の内容が追加されます。エラーコードは、名前が;で始まる定数で識別されますE。値はオペレーティングシステムによって異なります。これらのエラーコードは標準ですが(たとえば、EACCESS常に「許可が拒否されました」を意味し、EIO常に「入力/出力エラー」を意味します)、各エラーメッセージの正確な意味はシステムコールによって異なります。

標準機能strerrorそしてperrorユーザーに表示できるエラーメッセージを提供します。

1最後のシステム呼び出しまたはCライブラリ関数呼び出し中にエラーが発生していない場合は、ガベージを含めることができます。errno

おすすめ記事