2016-04-05 20 views
7

Scrivo un programma c che include il file fcntl.h. Cerco il file e ottenere risultati come segue:perché ci sono più 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); 
... 

trovo chiamate gcc /usr/include/asm-generic/fcntl.h in realtà quando ho messo #include <fcntl.h> in programma. Mi chiedo solo come gcc determini quale "fcntl.h" dovrebbe essere chiamato. C'è qualche ordine di chiamata o precedenza?

+2

Dipende dalle impostazioni PATH o dall'opzione gcc '-I'. – LPs

+2

dai un'occhiata a [Percorso di ricerca] (https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html) – LPs

+1

@LPs: perché tecnicamente vero, dovresti includere solo quello in/usr/include'. –

risposta

1

Uno include un altro che include il prossimo fino a quando quello con la definizione è incluso.

Problemi correlati