如何将错误号转换为“errno”常量?

An̲*_*rew 5 unix troubleshooting

假设我有一个在 UNIX 机器上运行的应用程序失败,系统错误状态为“13”。现在,我可以轻松地在 errno.h 中查找此值,以发现这是一个权限被拒绝的问题。

> grep -w 13 /usr/include/errno.h
#define EACCES  13      /* Permission denied                    */
Run Code Online (Sandbox Code Playgroud)

是否有更简单的命令来检索此信息?我希望能够运行这样的东西:

> lookuperror 13
EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)

而不是 grepping 系统头文件。是否存在这样的命令/程序?

更新: 正如下面的答案所指出的,strerror()系统调用返回此信息。是否有任何带有执行此系统调用的可执行实用程序的 UNIX 操作系统,或者我是否需要编写自己的程序来执行此操作?

rad*_*ius 8

我用来做

perl -MPOSIX -e 'print strerror($ARGV[0])."\n";' 13
Run Code Online (Sandbox Code Playgroud)

您可以将 Perl 代码放在一个文件中并将其放在路径中。
当然也可以用C来完成

  • '当然它也可以使用 C 来完成' - 可移植性较差(需要重新编译) (2认同)

Che*_*ion 1

作为解决方法,您可以在 shell 中创建一个别名或函数:

例如。.bashrc

function lookuperror
{
    grep -w "$@" /usr/include/errno.h
}
Run Code Online (Sandbox Code Playgroud)