我正在使用 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
从 shell 中,您可以运行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
s 之后,该错误是 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 */