"Sys / ioctl.h" Header unter Linux

8

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?

Hari
quelle
Ist das besser geeignet für stackoverflow?
Hari

Antworten:

5

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 wie kernel-headersoder sind linux-headers.

rvs
quelle
3

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, die sys/ioctl.hrelativ 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.

Gilles 'SO - hör auf böse zu sein'
quelle