1

私は Rad Hat 8.0 で作業しており、カーネルに変更を加えようとしていますが、コンパイル段階にあります。include/linux にラッパー関数を定義するヘッダーがあり、それらは errno を使用します。を使用してerrno.hを含め #include <errno.h>ました。コンパイルしようとすると、「errno.h no such file or directory」と表示されます。試し #include <linux/errno.h> てみると、それが見つかりましたが、使用前に変数を errno に宣言しなかったと不平を言います。私は errno.h を見ましたが、実際には宣言されていません。これは、ここで定義されているという印象を受けていたため、混乱しています。

私は間違った場所を探していますか?errno を使用するにはどうすればよいですか?

4

3 に答える 3

2

カーネル コードの場合、#include <linux/errno.h>.

の extern 宣言errnoは にあり#include <linux/unistd.h>ます。

于 2009-11-11T21:59:35.537 に答える
1

これに応じてerrno、負の値を返すと変数が自動的に設定されます。

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

この場合、ユーザースペースに返される結果はになり-1errno変数の値はになりerrorcodeます。

于 2012-10-03T22:45:35.927 に答える
0

errno は extern として定義されています

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

このファイルをあなたのものでコンパイルする必要があります

于 2009-11-11T21:59:13.680 に答える