2009-11-11 91 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值。