“sys / ioctl.h” cabeçalho no linux

8

Estou em Linux 2.6.32-26-generic

Quando eu olho para o código fonte do linux para o arquivo hearer "ioctl.h", eu pude ver muitas variantes. (para diferentes plataformas, eu acho). ou seja,

./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

Mas vejo esse arquivo sendo incluído como #include <sys/ioctl.h>

Como funciona esse mapeamento?

    
por hari 21.09.2011 / 19:53

2 respostas

5

Eu acredito que o arquivo está sendo incluído é /usr/include/sys/ioctl.h (não de / usr / src / linux ou alguns). E no meu sistema, ele pertence à glibc, não ao kernel ou aos cabeçalhos do kernel.

Na verdade, nada é incluído no código-fonte do kernel - cabeçalhos dentro de / usr / src / linux (ou assim) estão sendo usados apenas para compilação do kernel. Se algum software precisar de alguns cabeçalhos de kernel para compilar, ele usa aqueles em /usr/include/linux (e alguns outros), que geralmente são parte do pacote como kernel-headers ou linux-headers .

    
por 21.09.2011 / 20:34
3

O caminho de pesquisa padrão para arquivos de inclusão é /usr/include . Esta é uma propriedade do compilador C e, em teoria, compiladores diferentes podem usar caminhos diferentes, mas, na prática, todos eles procuram em /usr/include (e alguns outros locais dependentes do compilador).

#include <sys/ioctl.h> significa procurar um arquivo chamado sys/ioctl.h relativamente a uma entrada no caminho de inclusão, portanto /usr/include/sys/ioctl.h .

Os cabeçalhos no código-fonte do kernel não são relevantes, a menos que você esteja compilando um módulo do kernel (ou o próprio kernel). Cabeçalhos para programas userland vêm com a biblioteca C ou com o compilador C.

    
por 22.09.2011 / 01:37