了解 Linux 中的错误代码

The*_*ilk 4 linux system-calls error-handling

我正在使用 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 
Run Code Online (Sandbox Code Playgroud)

现在,我想了解这些错误的含义。

正如我所看到的,几乎没有标准错误代码位于 arch/powerpc/boot/stdio.h 和其他分散在其他各个地方的其他代码中。

Linux 中是否有任何系统的方法来跟踪(和理解)错误代码(在源代码中)?

Mik*_*kel 7

在 shell 中,您可以运行perror

$ perror 123
OS error code 123:  No medium found
Run Code Online (Sandbox Code Playgroud)

这是 MySQL 自带的。

如果你没有 MySQL,你可以使用 Perl 或 Python,例如:

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

$ python -c 'import os; print os.strerror(123)'
No medium found
Run Code Online (Sandbox Code Playgroud)

在 C 程序中,您可以使用具有相同名称的函数:

void perror(const char *s);
Run Code Online (Sandbox Code Playgroud)

它会打印您的消息s并附加错误的原因。

或者你可以使用:

char *strerror(int errnum);
Run Code Online (Sandbox Code Playgroud)

将错误的描述作为字符串返回,以便您可以检查它或按您喜欢的方式打印它。

查看man 3 perrorman 3 strerror了解详情。


Gil*_*il' 6

有标准误差值,定义在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.

如果您有数值,请调用标准库函数strerrorperror获取相应的错误消息(在您当前的语言环境中)。从命令行查看错误字符串的快速方法是

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