2012-07-05 3 views
2

특정 함수 (예 : fstatfs)를 찾으려고 시도했지만 다음 코드를 찾았습니다. 거의 아무것도 수행하지 않고 __set_errno 매크로를 검사했지만 단순히 오류 번호를 설정하는 것입니다.glibc의 소스 코드 구조는 무엇입니까

int 
__fstatfs (int fd, struct statfs *buf) 
{ 
    __set_errno (ENOSYS); 
    return -1; 
} 

그래서 코어 라이브러리 집합은 ASM에서 구현되지만 어떻게 작동합니까? 그렇다면 이러한 약한 기능이 왜 존재합니까?

+0

C에서 전화 할 수 있도록하려면? – Linuxios

+3

man fstatfs에 따르면 ENOSYS의 리턴 코드는 해당 파일 시스템이 호출을 지원하지 않는다는 것을 의미합니다. 다른 파일 시스템 소스를 찾으십시오. – tinman

+0

@tinman 다른 많은 함수 (예 : __connect, __listen)는 동일한 코드를 사용합니다. 아키텍처를 이해하지 못합니다. – daisy

답변

3

호출이 OS 의존적 인 것으로 추측됩니다. 따라서보고있는 것은 스텁 일뿐입니다. 어떤 종류의 별칭이 io/sys/statfs.h에있는 것으로 보이며 Linux 구현 후보는 sysdeps/unix/sysv/linux/fstatfs64.c 파일에 있습니다.

+0

예, 그렇게해야합니다. 더 자세히 살펴 보겠습니다. 감사합니다. – daisy

+0

맞아, 체. unistd.h에있는 대부분의 C 라이브러리 함수는 실제로 OS 커널에 의해 제공되며 C 라이브러리 구현은 커널 syscall 주위의 래퍼 일뿐입니다. –