2009-11-11 96 views
1

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

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

回答

0

错误号在

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

定义为一个外部的,你必须编译你的

2

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

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

1

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

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

在这种情况下,返回结果在用户空间将是-1errno变量将具有errorcode值。