私はUnixシステムプログラミングプログラムを書いていますが、要件の1つはシステムコールから返される可能性のあるすべてのエラーを処理することです。
したがって、各システムコールに専任する関数を置くよりも、この責任を担う関数を持ちたいと思います。それでは、返されたすべてのエラー番号は一意ですか?そうでない場合、どのような重複領域が存在しますか?
ベストアンサー1
2つの側面があります。システムコールがエラーを通知する方法とエラーが発生する方法が報告されます。
ほとんどのシステムコールは-1を返すことでエラーが発生したことを示しますが、これは完全に普遍的なものではありません(たとえば、一部のシステムコールは常に成功しますgetpid
)。
エラーが発生したことがわかっている場合、エラーコードは常にerrno
¹にあります。持つ標準値は次のように定義されます。errno.h
、各UNIXバリアントには独自の内容が追加されます。エラーコードは、名前が;で始まる定数で識別されますE
。値はオペレーティングシステムによって異なります。これらのエラーコードは標準ですが(たとえば、EACCESS
常に「許可が拒否されました」を意味し、EIO
常に「入力/出力エラー」を意味します)、各エラーメッセージの正確な意味はシステムコールによって異なります。
標準機能strerror
そしてperror
ユーザーに表示できるエラーメッセージを提供します。
1最後のシステム呼び出しまたはCライブラリ関数呼び出し中にエラーが発生していない場合は、ガベージを含めることができます。errno