在Linux的/usr/include目录下,我输入了命令:
找到-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规范中只有该文件的一个定义?
提前致谢。
最佳答案
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
从本质上讲,实际上唯一需要POSIX的 header 只是
unistd.h
,其余都是扩展或内核的定义。因此,仅需考虑unistd.h
就可以了,您所需的一切都将根据您的体系结构和所选的任何构建选项引入。关于c - Linux中/usr/include下的各种unistd.h之间有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2948696/