Estoy en Linux 2.6.32-26-generic
Cuando busco en el código fuente de Linux para el archivo de escucha "ioctl.h", pude ver muchas variantes. (para diferentes plataformas, supongo). es decir
./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
Pero veo que ese archivo se incluye como #include <sys/ioctl.h>
¿Cómo funciona este mapeo?
linux
c
header-file
hari
fuente
fuente
stackoverflow
?Respuestas:
Creo que el archivo que se incluye es
/usr/include/sys/ioctl.h
(no de / usr / src / linux o algunos). Y en mi sistema pertenece a glibc, no kernel o kernel-headers.En realidad, no se incluye nada de la fuente del núcleo: los encabezados dentro de / usr / src / linux (más o menos) se están utilizando solo para la compilación del núcleo. Si algún software necesita algunos encabezados de kernel para compilar, usa unos en
/usr/include/linux
(y algunos otros), que generalmente son parte de paquetes comokernel-headers
olinux-headers
.fuente
La ruta de búsqueda predeterminada para incluir archivos es
/usr/include
. Esta es una propiedad del compilador de C y, en teoría, diferentes compiladores podrían usar diferentes rutas, pero en la práctica todos buscan/usr/include
(y algunos otros lugares dependientes del compilador).#include <sys/ioctl.h>
significa buscar un archivo llamadosys/ioctl.h
relativamente a una entrada en la ruta de inclusión, por lo tanto/usr/include/sys/ioctl.h
.Los encabezados en la fuente del núcleo no son relevantes a menos que esté compilando un módulo del núcleo (o el núcleo mismo). Los encabezados para los programas de usuario vienen con la biblioteca C o con el compilador de C.
fuente