glibc와 같은 프로그램에 Linux 커널 헤더 파일이 필요한 이유는 무엇입니까? Linux API는 시스템 호출을 통해 제공되며, 다른 libc 구현(예: musl)에는 이러한 헤더가 필요하지 않습니다.
glibc를 특별하게 만드는 이유는 무엇입니까?
답변1
호출 메커니즘을 제외하면 시스템 호출은 일반 함수 호출과 다르지 않습니다. 일반 C 함수 호출과 마찬가지로 호출된 함수에 필요한 매개변수와 유형, 반환 값이 무엇인지 알아야 합니다. 예를 들어 stat
포인터를 인수로 사용하는 시스템 호출을 살펴보세요 struct stat
. 커널과 사용자 공간 코드는 데이터가 구조화되는 방식에 동의해야 하며 유형 정의의 최종 소스는 커널입니다.
이제 커널 API의 안정성 보장으로 인해 이러한 데이터 유형은 거의 변경되지 않습니다. 따라서 Musl 개발자는 커널 헤더 파일에 의존하는 것보다 수동으로 편집된 정의 복사본을 유지하는 것이 더 쉽다는 것을 알게 되었습니다. 예를 들어 Musl 소스 코드에는 파일에 자체 시스템 호출 번호 목록이 포함되어 있습니다 arch/x86_64/bits/syscall.h.in
.