在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规范中只有一个该文件的定义?
提前致谢.
Tim*_*ost 10
linux/unistd.h实际上指向asm/unistd.h,asm/unistd_32.h或者指向或者asm/unistd_64.h,这是系统调用号被定义并呈现给用户空间的位置,具体取决于系统的体系结构.这些来自内核.
bits/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
Run Code Online (Sandbox Code Playgroud)
实质上,唯一的POSIX必需标头实际上只是unistd.h,其余的是扩展或内核定义.因此,只需要包含unistd.h所有您需要担心的事情,您需要的所有内容都将根据您的体系结构和您选择的任何构建选项而被提取.
小智 5
这是C和C ++中的常用技术-您在“标准”位置有一个带有“标准”名称的文件,在本例中是./unistd.h,然后使该文件包含一个或多个实现特定的文件,具体取决于在预处理器宏上。如果查看几乎所有“标准” C或C ++头文件,您将看到它包括任何标准中未提及的其他文件。
| 归档时间: |
|
| 查看次数: |
3789 次 |
| 最近记录: |