Linuxのエラーコードについて

Linuxのエラーコードについて

私はLinux(カーネルバージョン2.6.32.28)ノートブックを使用しています。
ファイルio挿入/実行/SDコンボカードを削除すると、次のエラーが発生します。

mmcblk0: error -123 sending status command  
mmcblk0: error -123 sending read/write command, response 0x0, card status 0x0  
mmcblk0: error -123 sending requesting status 

今、これらのエラーが何を意味するのか理解したいと思います。

私が見ることができるように、標準エラーコードの非常に少ない部分はarch/powerpc/boot/stdio.hにありますが、他のコードはさまざまな場所に分散しています。

Linuxには(ソースコードで)エラーコードを追跡して理解するための体系的な方法はありますか?

答え1

シェルで以下を実行できますperror

$ perror 123
OS error code 123:  No medium found

これはMySQLに付属しています。

MySQLがない場合は、PerlまたはPythonを使用できます。たとえば、次のようになります。

$ perl -MPOSIX -e 'print strerror(123)'
No medium found

$ python -c 'import os; print os.strerror(123)'
No medium found

Cプログラムでは、同じ名前の関数を使用できます。

void perror(const char *s);

メッセージが印刷さsれ、エラーの理由が追加されます。

または、次のものを使用できます。

char *strerror(int errnum);

必要に応じて検査または印刷できるように、エラーの説明を文字列として返します。

詳細については、およびを参照してくださいman 3 perrorman 3 strerror

答え2

以下に定義されている標準エラー値があります。errno.h。システムはこのファイルを表示して値を確認できます。ほとんどのシステムは/usr/include/errno.h含まれているファイルまたはファイルにあります。 Linuxでは、ほとんどがまたは/usr/include/asm-generic/errno-base.hにあり、/usr/include/asm-generic/errno.hいくつかは/usr/include/bits/errno.h

値がある場合は、標準ライブラリ関数を呼び出します。strerrorまたはperror適切なエラーメッセージを受け取ります(現在のロケールから)。コマンドラインでエラー文字列を表示する簡単な方法は次のとおりです。

perl -MPOSIX -le 'print strerror 123'
python -c 'import os; print os.strerror(123)'
zmodload zsh/system; syserror 123  # in zsh

答え3

これはerrno.hで終わり、数#include秒後にエラーはENOMEDIUMです/usr/include/asm-generic/errno.h。削除する前に削除しましたか?

答え4

次の小さなユーティリティを見ることができます。エラー番号sed他の回答で言及されているヘッダファイルから情報を抽出することは、本質的にいくつかのシェルハッキングです。出力は次のとおりです。

$ errno 123
ENOMEDIUM      123     /* No medium found */
$ errno 111
ECONNREFUSED    111     /* Connection refused */
$ errno 122
EDQUOT        122     /* Quota exceeded */

関連情報