2009-11-11 2 views
1

나는 Rad Hat 8.0과 함께 커널을 변경하려고하는데, 나는 컴파일 단계에있다. include/linux에 래퍼 함수를 ​​정의하는 헤더가 있으며, errno를 사용합니다. 나는 #include <errno.h>을 사용하여 errno.h를 포함시켰다. 컴파일하려고하면 "errno.h는 그러한 파일이나 디렉토리가 없습니다"라고 알려줍니다. 시도 할 때 #include <linux/errno.h> 발견했지만 사용하기 전에 변수를 errno로 선언하지 않았다고 불평합니다. 나는 errno.h를 보았고 실제로 선언하지 않았으며 이것이 혼란 스럽다. 왜냐하면 이것이 정의 된 곳이라는 인상 아래에 있었기 때문이다.errno.h와 관련된 문제들

잘못된 장소를보고 있습니까? errno를 어떻게 사용합니까?

답변

0

errno는

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

에서 통근으로 정의된다 당신은 당신 커널 코드에 대한

2

, #include <linux/errno.h>이 파일을 컴파일해야합니다.

errno의 extern 선언은 #include <linux/unistd.h>입니다.

1

음수 값을 반환하면 this에 따라 errno 변수가 자동으로 설정됩니다.

이 경우

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

은 사용자 공간에서의 복귀 결과 -1되며 errnoerrorcode 변수의 값을 가질 것이다.