【发布时间】:2015-05-04 20:26:54
【问题描述】:
偶尔(例如使用strace、gdb 等)发现一个POSIX 调用将errno 设置为一个整数值,并且想知道编译时间C 常量(更准确的预处理器定义)来检查对于它(例如ECHILD) - 参见例如waitpid for child process not succeeding.
EG 在上述链接问题中,整数错误号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,因此不满足要求。
有没有比手动grep 到/usr/include 更简单的方法?
你可能认为是重复但不是的东西:
How to convert errno in UNIX to corresponding string? - 说
strerror(显然)将整数转换为人类可读的字符串,然后perror打印它。我不想那样做。我想打印符号等价物,即可用于测试errno的预处理器定义。Linux, convert errno to name - 更接近,但正在寻找 API 调用。显然没有其中之一。接受的答案还错误地指出错误位于
errno.h- 在我的系统中,它们分布在多个文件之间,使搜索更有趣。 How can I print the symbolic name of an errno in C? 类似。
一个适当的答案可能涉及一些魔法来预处理/usr/include 的适当部分并显示任何以E 开头的具有适当值的常量。
【问题讨论】:
-
问题有点不清楚。你的意思是给定 ECHILD 的 int 值,你想要那个符号“ECHILD”的 /name/?
-
@BadZen - 准确地说。我会澄清的。
-
@cdarke - 我认为这与我提到的第二个类似 - 我不需要 在 C 中这样做。