Je suis sur Linux 2.6.32-26-generic
Quand je regarde dans le code source linux pour le fichier d'auditeur "ioctl.h", je pouvais voir de nombreuses variantes. (pour différentes plateformes, je suppose). c'est à dire
./fs/ocfs2/ioctl.h
./fs/btrfs/ioctl.h
./fs/ceph/ioctl.h
./include/config/i2o/config/old/ioctl.h
./include/asm-generic/ioctl.h
./include/linux/hdlc/ioctl.h
./include/linux/ioctl.h
./drivers/video/via/ioctl.h
./drivers/staging/vt6655/ioctl.h
./drivers/staging/vt6656/ioctl.h
./arch/ia64/include/asm/ioctl.h
./arch/h8300/include/asm/ioctl.h
./arch/microblaze/include/asm/ioctl.h
./arch/score/include/asm/ioctl.h
./arch/avr32/include/asm/ioctl.h
./arch/alpha/include/asm/ioctl.h
./arch/x86/include/asm/ioctl.h
./arch/m32r/include/asm/ioctl.h
./arch/mn10300/include/asm/ioctl.h
./arch/sparc/include/asm/ioctl.h
./arch/powerpc/include/asm/ioctl.h
./arch/m68k/include/asm/ioctl.h
./arch/sh/include/asm/ioctl.h
./arch/xtensa/include/asm/ioctl.h
./arch/mips/include/asm/ioctl.h
./arch/s390/include/asm/ioctl.h
./arch/arm/include/asm/ioctl.h
./arch/blackfin/include/asm/ioctl.h
./arch/frv/include/asm/ioctl.h
./arch/parisc/include/asm/ioctl.h
./arch/cris/include/asm/ioctl.h
Mais je vois que ce fichier est inclus comme #include <sys/ioctl.h>
Comment fonctionne cette cartographie?
linux
c
header-file
hari
la source
la source
stackoverflow
?Réponses:
Je crois que le fichier est inclus est
/usr/include/sys/ioctl.h
(pas de / usr / src / linux ou certains). Et sur mon système, il appartient à la glibc, pas au noyau ou aux en-têtes de noyau.En fait, rien n'est inclus à partir de la source du noyau - les en-têtes dans / usr / src / linux (ou ainsi) sont utilisés uniquement pour la compilation du noyau. Si certains logiciels ont besoin d'en-têtes de noyau pour être compilés, ils en utilisent des
/usr/include/linux
(et quelques autres), qui font généralement partie d'un package commekernel-headers
oulinux-headers
.la source
Le chemin de recherche par défaut des fichiers d'inclusion est
/usr/include
. C'est une propriété du compilateur C, et en théorie, différents compilateurs pourraient utiliser des chemins différents, mais en pratique, ils regardent tous/usr/include
(et quelques autres emplacements dépendants du compilateur).#include <sys/ioctl.h>
signifie donc rechercher un fichier appelésys/ioctl.h
relativement à une entrée du chemin d'inclusion/usr/include/sys/ioctl.h
.Les en-têtes de la source du noyau ne sont pertinents que si vous compilez un module du noyau (ou le noyau lui-même). Les en-têtes des programmes utilisateur sont fournis avec la bibliothèque C ou le compilateur C.
la source