私は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 perror
。man 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 */