与errno.h的麻烦

时间:2009-11-11 21:52:53

标签: linux redhat errno

我正在使用Rad Hat 8.0,试图对内核进行更改,而我正处于编译阶段。 我在include / linux中有一个标题,我在其中定义了包装函数,并且它们使用了errno。我使用了errno.h #include <errno.h>。 当我尝试编译时,它告诉我“errno.h没有这样的文件或目录”。当我尝试 #include <linux/errno.h> 它发现它但是抱怨我在使用之前没有声明errno变量。 我看了errno.h并且它确实没有声明它,这令人困惑,因为我的印象是这是它定义的地方。

我找错了地方吗?我如何利用errno?

3 个答案:

答案 0 :(得分:2)

对于内核代码#include <linux/errno.h>

errno的外部声明位于#include <linux/unistd.h>

答案 1 :(得分:1)

根据this,当您返回负值时,errno变量会自动设置。

示例

asmlinkage long sys_foo() {
    ...
    if(error)
        return -(errorcode);
    ...
}

在这种情况下,用户空间中的返回结果将为-1,而errno变量的值为errorcode

答案 2 :(得分:0)

errno被定义为

中的extern
/usr/src/lib/linux/errno.c

你必须用你的

编译这个文件