1

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

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

4

3 回答 3

2

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

的外部声明errno是 in #include <linux/unistd.h>

于 2009-11-11T21:59:35.537 回答
1

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

示例

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

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

于 2012-10-03T22:45:35.927 回答
0

errno 被定义为外部

/usr/src/lib/linux/errno.c

你必须用你的编译这个文件

于 2009-11-11T21:59:13.680 回答