为什么 linux 中有多个 fcntl.h?
why are there multiple fcntl.h in linux?
我写了一个包含 fcntl.h
文件的 c 程序。我搜索文件并得到如下结果:
[xunyl@localhost csapp]$ find /usr/include/ -name "fcntl.h"
/usr/include/asm/fcntl.h
/usr/include/asm-generic/fcntl.h
/usr/include/linux/fcntl.h
/usr/include/sys/fcntl.h
/usr/include/bits/fcntl.h
/usr/include/fcntl.h
[xunyl@localhost csapp]$ grep -rn "O_RDONLY" /usr/include/
/usr/include/asm-generic/fcntl.h:19:#define O_RDONLY 00000000
/usr/include/linux/cdrom.h:32: * - drive = open("/dev/cdrom", O_RDONLY);
/usr/include/linux/cdrom.h:33: * + drive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
...
当我在程序中放入 #include <fcntl.h>
时,我发现 gcc 实际上调用了 /usr/include/asm-generic/fcntl.h
。我只是想知道 gcc 如何确定应该调用哪个 "fcntl.h"。有没有调用顺序或优先顺序?
一个包括另一个,另一个包括下一个,直到包含定义的那个。
我写了一个包含 fcntl.h
文件的 c 程序。我搜索文件并得到如下结果:
[xunyl@localhost csapp]$ find /usr/include/ -name "fcntl.h"
/usr/include/asm/fcntl.h
/usr/include/asm-generic/fcntl.h
/usr/include/linux/fcntl.h
/usr/include/sys/fcntl.h
/usr/include/bits/fcntl.h
/usr/include/fcntl.h
[xunyl@localhost csapp]$ grep -rn "O_RDONLY" /usr/include/
/usr/include/asm-generic/fcntl.h:19:#define O_RDONLY 00000000
/usr/include/linux/cdrom.h:32: * - drive = open("/dev/cdrom", O_RDONLY);
/usr/include/linux/cdrom.h:33: * + drive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
...
当我在程序中放入 #include <fcntl.h>
时,我发现 gcc 实际上调用了 /usr/include/asm-generic/fcntl.h
。我只是想知道 gcc 如何确定应该调用哪个 "fcntl.h"。有没有调用顺序或优先顺序?
一个包括另一个,另一个包括下一个,直到包含定义的那个。