Проблемы с errno.h

Работаю с Rad Hat 8.0, пытаюсь внести изменения в ядро, нахожусь на стадии компиляции. У меня есть заголовок в include/linux, где я определяю функции-оболочки, и они используют errno. Я включил errno.h, используя #include <errno.h>. Когда я пытаюсь скомпилировать, он говорит мне: «errno.h нет такого файла или каталога». Когда я пытаюсь #include <linux/errno.h>, он находит его, но жалуется, что я не объявил переменную errno перед использованием. Я посмотрел на errno.h, и он действительно не объявлен, что сбивает с толку, потому что у меня сложилось впечатление, что именно здесь он определен.

Я ищу в неправильных местах? Как мне использовать errno?


person Epsilon Vector    schedule 11.11.2009    source источник


Ответы (3)


Для кода ядра #include <linux/errno.h>.

Объявление extern для errno находится в #include <linux/unistd.h>.

person David Joyner    schedule 11.11.2009

В соответствии с этой, errno переменная устанавливается автоматически, когда вы возвращаете отрицательное значение.

Пример:

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

В этом случае возвращаемый результат в пользовательском пространстве будет -1, а переменная errno будет иметь значение errorcode.

person Alex    schedule 03.10.2012

errno определяется как внешний в

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

вы должны скомпилировать этот файл с вашим

person ennuikiller    schedule 11.11.2009