是否有一个函数可以 return 一个符号名称,例如 `EIO`,用于 `errno` 值?
Is there a function that will return a symbol name, such as `EIO`, for an `errno` value?
在 Linux 和 OS X 上,strerror
returns 一个人类可读的名称。例如,这是它刚刚在 Linux 上针对错误号 5.
返回的内容
Input/output error
没关系,但是手册页使用符号名称,例如EIO
,并没有列出相应的数字。有没有我可以用来获取符号名称的函数?
我非常怀疑 pure POSIX 是否提供了以便携方式实现这一点的工具。在大多数情况下,我个人只是在编辑器中打开 /usr/include/errno.h
文件并从那里浏览它。 (在 Linux 上最终导致 /usr/include/asm-generic/errno-base.h
和 /usr/include/asm-generic/errno.h
文件,其中实际指定了代码。)
此外,对于具有 GCC(或 clang)的系统,我可以想出这样的脚本:
gcc -dM -E - < /usr/include/errno.h |
grep 'define E\w\+ [0-9]\+$' |
sort -k3 -n
GNU 预处理器有一个选项 (-dM
) 可以将它遇到的所有定义打印到输出中。这可用于帮助解析 /usr/include/errno.h
文件以提取错误代码。
在 Linux 和 OS X 上,strerror
returns 一个人类可读的名称。例如,这是它刚刚在 Linux 上针对错误号 5.
Input/output error
没关系,但是手册页使用符号名称,例如EIO
,并没有列出相应的数字。有没有我可以用来获取符号名称的函数?
我非常怀疑 pure POSIX 是否提供了以便携方式实现这一点的工具。在大多数情况下,我个人只是在编辑器中打开 /usr/include/errno.h
文件并从那里浏览它。 (在 Linux 上最终导致 /usr/include/asm-generic/errno-base.h
和 /usr/include/asm-generic/errno.h
文件,其中实际指定了代码。)
此外,对于具有 GCC(或 clang)的系统,我可以想出这样的脚本:
gcc -dM -E - < /usr/include/errno.h |
grep 'define E\w\+ [0-9]\+$' |
sort -k3 -n
GNU 预处理器有一个选项 (-dM
) 可以将它遇到的所有定义打印到输出中。这可用于帮助解析 /usr/include/errno.h
文件以提取错误代码。