/usr/include/sys 和 /usr/include/linux 的区别?

Jef*_*eff 12 linux fedora header-file

嗯,显然有区别,但我很好奇为什么有些东西在 /usr/include/sys 下而其他东西在 /usr/include/linux 下,并且具有相同的头文件名?这与 POSIX vx non-POSIX 有关系吗?

此外,我已经通过获取内核头文件包设法在我的 Fedora 系统上使用头文件填充 /usr/include/linux,是否有一个标准的包名称让我获取位于 /usr/include/sys 下的头文件? 我一直无法找到它。

Gil*_*il' 14

下面/usr/include/linux和下面的头文件/usr/include/asm*随Linux内核一起分发。其他头文件(/usr/include/sys/*.h/usr/include/bits/*.h等)随 C 库(GNU C 库,也称为 glibc,在所有非嵌入式 Linux 系统上)一起分发。glibc 手册中有一点解释

请注意,/usr/include/linux并且/usr/include/asm应该包含编译 C 库时使用的头文件,而不是来自正在运行的内核的头文件。否则,如果某些常量或数据结构发生变化,编译后的程序和C库之间就会出现不一致,很可能导致崩溃或更糟。(如果头文件与 C 库匹配但 C 库与内核不匹配,那么实际发生的情况是内核旨在保持稳定的 ABI,并且必须检测到它在不同的 ABI 下被调用并相应地解释系统调用参数。无论如何,内核必须为静态编译的程序执行此操作。)

我记得一段时间(十年?)前 Debian 和 Red Hat 就这个/usr/include/linux问题展开了激烈的辩论;显然每一方都在坚持自己的立场。(据我了解,Debian 是对的,如上所述。)Debian 目前分发/usr/include/linuxlinux-libc-dev软件包中的朋友,该软件包是从内核源代码编译的,但未随内核一起升级。内核头文件位于提供linux-headers-2.6元包的特定版本包中;这是为特定内核版本编译模块所需要的。

您正在寻找的包是 C 库头文件。我不知道它叫什么,但你可以通过yum provides /usr/include/sys/types.h.

  • 最后一点的答案是`glibc-headers`。 (2认同)