2016-04-05 11 views
7

Ich schreibe ein c-Programm, das fcntl.h Datei enthält. Ich die Datei suchen und die Ergebnisse wie folgt erhalten:Warum gibt es mehrere fcntl.h in Linux?

[[email protected] 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 

[[email protected] 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); 
... 

ich gcc Anrufe finden /usr/include/asm-generic/fcntl.h eigentlich, wenn ich #include <fcntl.h> in Programm setzen. Ich frage mich nur, wie gcc bestimmt, welches "fcntl.h" aufgerufen werden soll. Gibt es eine Anrufreihenfolge oder einen Vorrang?

+2

Es hängt von PATH-Einstellungen ab, oder gcc '-I' Option. – LPs

+2

werfen Sie einen Blick auf [Suchpfad] (https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html) – LPs

+1

@LPs: Warum technisch wahr, würden Sie nur die eine in '/ usr/einschließen ". –

Antwort

1

Einer enthält einen anderen, der den nächsten enthält, bis der mit der Definition enthalten ist.

Verwandte Themen