En-tête "sys / ioctl.h" sous linux

8

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?

hari
la source
Est-ce plus approprié pour stackoverflow?
hari

Réponses:

5

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 comme kernel-headersou linux-headers.

rvs
la source
3

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.hrelativement à 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.

Gilles 'SO- arrête d'être méchant'
la source