Encabezado "sys / ioctl.h" en Linux

8

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?

hari
fuente
¿Es esto más apropiado para stackoverflow?
hari

Respuestas:

5

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 como kernel-headerso linux-headers.

rvs
fuente
3

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 llamado sys/ioctl.hrelativamente 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.

Gilles 'SO- deja de ser malvado'
fuente