了解 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

从 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 中结束,在多个#includes 之后,该错误是 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 */

相关内容