当调用execl(…)时,我得到一个errno=2。这是什么意思?我怎么知道这个errno的意思?
当前回答
可以使用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()。
其他回答
我在我的.bashrc文件中有以下函数-它从头文件中查找errno值(可以是/usr/include/errno.h, /usr/include/linux/errno.h,等等,等等)
如果头文件安装在机器上,它就可以工作;-)
通常头文件有一个错误+接下来是注释中的解释;以下内容:
./asm-generic/errno-base.h:#define EAGAIN 11 /*重试*/
function errno()
{
local arg=$1
if [[ "x$arg" == "x-h" ]]; then
cat <<EOF
Usage: errno <num>
Prints text that describes errno error number
EOF
else
pushd /usr/include
find . -name "errno*.h" | xargs grep "[[:space:]]${arg}[[:space:]]"
popd
fi
}
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main(int i, char *c[]) {
if (i != 2)
fprintf(stderr, "Usage: perror errno\n");
else {
errno = atoi(c[1]);
perror("");
}
exit(0);
}
适用于Solaris。 Cc perror.c -o perror <<使用这一行来编译它
在Linux上也有一个非常简洁的工具,可以立即告诉每个错误代码的含义。Ubuntu: apt-get install errno。
然后,例如,如果您想获取错误类型2的描述,只需在终端中键入errno 2。
使用errno -l可以得到一个包含所有错误及其描述的列表。比之前的海报提到的其他方法简单多了。
有几个处理错误的有用函数。(为了说明这一点,这些都是libc内置的——我只是提供示例实现,因为有些人觉得阅读代码比阅读英语更清楚。)
#include <string.h>
char *strerror(int errnum);
/* you can think of it as being implemented like this: */
static char strerror_buf[1024];
const char *sys_errlist[] = {
[EPERM] = "Operation not permitted",
[ENOENT] = "No such file or directory",
[ESRCH] = "No such process",
[EINTR] = "Interrupted system call",
[EIO] = "I/O error",
[ENXIO] = "No such device or address",
[E2BIG] = "Argument list too long",
/* etc. */
};
int sys_nerr = sizeof(sys_errlist) / sizeof(char *);
char *strerror(int errnum) {
if (0 <= errnum && errnum < sys_nerr && sys_errlist[errnum])
strcpy(strerror_buf, sys_errlist[errnum]);
else
sprintf(strerror_buf, "Unknown error %d", errnum);
return strerror_buf;
}
Strerror返回一个字符串,描述您传递给它的错误编号。注意,这不是线程或中断安全的;可以自由地重写字符串并在下次调用时返回相同的指针。如果需要考虑这个问题,请使用strerror_r。
#include <stdio.h>
void perror(const char *s);
/* you can think of it as being implemented like this: */
void perror(const char *s) {
fprintf(stderr, "%s: %s\n", s, strerror(errno));
}
Perror将您给它的消息以及描述当前errno的字符串打印到标准错误。
它的意思是:
未找到文件或目录。
推荐文章
- c++中size_t和int的区别是什么?
- 在C和c++中静态变量存储在哪里?
- 如何修改Linux系统中打开文件的数量限制?
- errno线程安全吗?
- 如何在C程序中获取当前目录?
- 如何在Linux中永久导出变量?
- 互斥实例/教程?
- 如何添加一个'或'条件在#ifdef
- 如何首次配置postgresql ?
- 检索Linux上单个进程的CPU使用情况和内存使用情况?
- 如何从远程SSH会话发送数据到本地剪贴板
- extern关键字对C函数的影响
- 如果使用if-return-return或if-else-return?
- SSH端口转发~/。ssh /配置文件?
- 在Linux中安装Java SDK后,我可以在哪里找到它?