当调用execl(…)时,我得到一个errno=2。这是什么意思?我怎么知道这个errno的意思?


当前回答

您可以使用以下一行程序检索系统上的errno值的完整列表,而不是对所得到的任何错误代码运行perror:

cpp -dM /usr/include/errno.h | grep 'define E' | sort -n -k

其他回答

可以使用strerror()为错误号获取一个人类可读的字符串。这与perror()打印的字符串相同,但如果要将错误消息格式化为标准错误输出以外的内容,则此字符串非常有用。

例如:

#include <errno.h>
#include <string.h>

/* ... */

if(read(fd, buf, 1)==-1) {
    printf("Oh dear, something went wrong with read()! %s\n", strerror(errno));
}

Linux还支持显式线程安全变体strerror_r()。

当您使用strace(在Linux上)运行二进制文件时,它将输出系统调用的返回值以及错误数的含义。这可能有时对你有用。

您可以使用以下一行程序检索系统上的errno值的完整列表,而不是对所得到的任何错误代码运行perror:

cpp -dM /usr/include/errno.h | grep 'define E' | sort -n -k

在Linux上也有一个非常简洁的工具,可以立即告诉每个错误代码的含义。Ubuntu: apt-get install errno。

然后,例如,如果您想获取错误类型2的描述,只需在终端中键入errno 2。

使用errno -l可以得到一个包含所有错误及其描述的列表。比之前的海报提到的其他方法简单多了。

错误码2表示“未找到文件/目录”。通常,可以使用perror函数打印人类可读的字符串。