Linux下/ usr / include下的各种unistd.h有什么区别?

时间:2010-06-01 09:46:14

标签: c linux

在Linux下的/ usr / include目录下,我输入了命令: find -type f -name unistd.h,它给出了以下输出:

./ unistd.h中 ./linux/unistd.h ./asm-generic/unistd.h ./bits/unistd.h ./asm/unistd.h ./sys/unistd.h

我的问题是,每个unistd.h的目的是什么,因为单个unix规范中只有一个该文件的定义?

提前致谢。

3 个答案:

答案 0 :(得分:9)

linux/unistd.h实际上指向asm/unistd.hasm/unistd_32.h又指向asm/unistd_64.hbits/unistd.h,这是系统调用号码定义并呈现给用户空间的位置,具体取决于系统的架构。这些来自内核。

unistd.h是一个扩展/* Define some macros helping to catch buffer overflows. */ #if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline # include <bits/unistd.h> #endif 的宏集合(主要用于帮助防止缓冲区溢出),它通过以下方式有条件地包括在内:

unistd.h

实质上,唯一需要POSIX的标头实际上只是unistd.h,其余的是扩展或内核定义。因此,只需包含{{1}}就可以了解所有内容,根据您的体系结构和您选择的任何构建选项,您需要的所有内容都会被提取。

答案 1 :(得分:4)

这是C和C ++中的常用技术 - 在“标准”位置有一个带有“标准”名称的文件,在本例中为./unistd.h,然后让该文件包含一个或多个特定于实现的文件文件,取决于预处理器宏。如果您查看几乎所有“标准”C或C ++头文件,您将看到它包括任何标准中未提及的其他文件。

答案 2 :(得分:0)

基本上认为/usr/include/unistd.h是一个明智的符号链接。根据您的操作条件,它将指向正确的实施。

也就是说,有时候很难弄清楚正确的实现是什么。