在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.hasm/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/

10-11 18:31