strace
、gdb
等工具),会发现 POSIX 调用将 errno
设置为整数值,而且想要知道编译时的 C 常量(更准确地说是预处理器定义)来检查它(如 ECHILD
) - 请参见例如waitpid for child process not succeeding。例如,在上述链接的问题中,整数错误号码
10
返回到了 errno
中。我想从中得到字符串 ECHILD
,而不是像 perror
或 strerror
给出的内容(类似于“没有子进程”等)。这里是明显但行不通的方法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main (int argc, char **argv)
{
printf ("%s\n", strerror (10));
exit (0);
}
这将打印输出:
No child processes
不是ECHILD
,因此无法执行所需操作。
有没有比在/usr/include
中进行相对手动的grep
更简单的方法?
你可能认为是重复项但实际上并非如此:
如何将UNIX中的errno转换为相应的字符串? - 说
strerror
(显然)将整数转换为人类可读的字符串,perror
打印它。我不想这样做。我想打印符号等效项,即可用于测试errno
的预处理器定义。Linux,将errno转换为名称 - 更接近,但正在寻找API调用。显然没有这样一个。 接受的答案还错误地声明错误在
errno.h
中 - 在我的系统中,它们分布在多个文件之间,使搜索更有趣。 如何在C中打印errno的符号名称? 类似。
适当的答案可能涉及一些魔法,以预处理 /usr/include
的适当部分,并显示以 E
开头且具有适当值的任何常量。