ich bin on Linux 2.6.32-26-generic
Wenn ich in den Linux-Quellcode für die Hörerdatei "ioctl.h" schaue, sehe ich viele Varianten. (Für verschiedene Plattformen, denke ich). dh
./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
Aber ich sehe diese Datei als #include <sys/ioctl.h>
Wie funktioniert dieses Mapping?
linux
c
header-file
Hari
quelle
quelle
stackoverflow
?Antworten:
Ich glaube, dass die Datei enthalten ist
/usr/include/sys/ioctl.h
(nicht aus / usr / src / linux oder einigen). Und auf meinem System gehört es zu glibc, nicht zu Kernel oder Kernel-Headern.Tatsächlich wird nichts aus der Kernelquelle aufgenommen - Header in / usr / src / linux (oder so) werden nur für die Kernelkompilierung verwendet. Wenn eine Software zum Kompilieren einige Kernel-Header benötigt, werden solche in
/usr/include/linux
(und einige andere) verwendet, die normalerweise Teil eines Pakets wiekernel-headers
oder sindlinux-headers
.quelle
Der Standardsuchpfad für Include-Dateien lautet
/usr/include
. Dies ist eine Eigenschaft des C-Compilers, und theoretisch könnten verschiedene Compiler unterschiedliche Pfade verwenden, in der Praxis sehen sie jedoch alle/usr/include
(und einige andere vom Compiler abhängige Stellen).#include <sys/ioctl.h>
bedeutet also, nach einer Datei zu suchen, diesys/ioctl.h
relativ zu einem Eintrag im Include-Pfad aufgerufen wird/usr/include/sys/ioctl.h
.Die Header in der Kernelquelle sind nur relevant, wenn Sie ein Kernelmodul (oder den Kernel selbst) kompilieren. Header für Userland-Programme werden mit der C-Bibliothek oder dem C-Compiler geliefert.
quelle