当调用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()。
其他回答
错误码2表示“未找到文件/目录”。通常,可以使用perror函数打印人类可读的字符串。
#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 <<使用这一行来编译它
我在我的.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
}
当您使用strace(在Linux上)运行二进制文件时,它将输出系统调用的返回值以及错误数的含义。这可能有时对你有用。
这比在errno.h中查找代码要快,比这里发布的大多数解决方案都要短,并且不需要安装第三方工具:
perl -E 'say $!2 =转变'
收益率
没有这样的文件或目录
推荐文章
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- Linux Bash中双&和分号有什么区别?
- C“int”的大小是2字节还是4字节?
- 多维数组如何在内存中格式化?
- printf()和puts()在C语言中的区别是什么?
- 断言是邪恶的吗?
- 在SSH会话中查找客户端的IP地址
- C++ Linux的想法?
- 有效,但毫无价值的语法在开关情况下?
- 如何为Fedora安装g++ ?
- 有一个好的Valgrind Windows的替代品吗?
- gcc在哪里查找C和c++头文件?
- Linux删除大小为0的文件
- Spring引导应用程序作为服务
- 如何重定向标准derr和标准输出到不同的文件在同一行脚本?