/ usr / include / sys와 / usr / include / linux의 차이점은 무엇입니까? 어떤 것들이 / usr

글쎄, 분명히 차이점이 있지만, 왜 어떤 것들이 / usr / include / sys에 있고 다른 것들이 / usr / include / linux에 있고 동일한 헤더 파일 이름을 갖는 이유 뒤에 합리적인 이유가 궁금합니다. 이것은 POSIX vx 비 POSIX와 관련이 있습니까?

또한 커널 헤더 패키지를 가져 와서 Fedora 시스템에서 헤더로 / usr / include / linux를 채우고 / usr / include / sys 아래에있는 헤더 파일을 얻을 수있는 표준 패키지 이름이 있습니까? ? 나는 그것을 찾을 수 없었다.



답변

아래 /usr/include/linux및 아래 의 헤더 /usr/include/asm*는 Linux 커널과 함께 배포됩니다. 다른 헤더 ( /usr/include/sys/*.h, /usr/include/bits/*.h및 기타)는 C 라이브러리 ( 포함되지 않은 모든 Linux 시스템에서 glibc라고도 하는 GNU C 라이브러리 )와 함께 배포됩니다 . glibc 매뉴얼에 약간의 설명이 있습니다 .

주의 /usr/include/linux/usr/include/asmC 라이브러리, 실행중인 커널에서하지 헤더를 컴파일 할 때 사용 된 헤더를 포함해야합니다. 그렇지 않으면 일부 상수 또는 데이터 구조가 변경되면 컴파일 된 프로그램과 C 라이브러리간에 불일치가 발생하여 충돌이 발생하거나 더 악화 될 수 있습니다. (헤더가 C 라이브러리와 일치하지만 C 라이브러리가 커널과 일치하지 않는 경우 실제로 발생하는 것은 커널이 안정적인 ABI를 유지하도록 설계되었으며 다른 ABI에서 호출 된 것을 감지하고 이에 따라 syscall 인수를 해석해야한다는 것입니다. 커널은 정적으로 컴파일 된 프로그램에 대해이 작업을 수행해야합니다.)

나는이 /usr/include/linux문제 에 대해 한동안 (10 년 전) 데비안과 레드햇 간의 격렬한 토론을 기억합니다 . 분명히 각면이 그 위치에 붙어 있습니다. (내가 이해하는 한, 데비안은 위에서 설명한 것처럼 옳다.) 데비안은 현재 패키지로 배포 /usr/include/linux하고 친구를 linux-libc-dev가지고 있는데, 커널 소스에서 컴파일되었지만 커널로 업그레이드되지는 않았다. 커널 헤더는 linux-headers-2.6메타 패키지를 제공하는 버전 별 패키지에 있습니다. 이것은 특정 커널 버전에 대한 모듈을 컴파일하는 데 필요한 것입니다.

찾고있는 패키지는 C 라이브러리 헤더입니다. 나는 그것이 무엇인지 모르지만, 당신은로 알 수 있습니다 yum provides /usr/include/sys/types.h.