Estou em Linux 2.6.32-26-generic
Quando olho para o código-fonte do Linux para o arquivo ouvinte "ioctl.h", pude ver muitas variantes. (para plataformas diferentes, eu acho). ie
./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 esse mapeamento funciona?
linux
c
header-file
hari
fonte
fonte
stackoverflow
?Respostas:
Eu acredito que o arquivo está sendo incluído é
/usr/include/sys/ioctl.h
(não de / usr / src / linux ou algum). E no meu sistema pertence à glibc, não ao kernel ou ao kernel-headers.Na verdade, nada é incluído no código-fonte do kernel - cabeçalhos dentro de / usr / src / linux (mais ou menos) estão sendo usados apenas para compilação do kernel. Se algum software precisar de alguns cabeçalhos do kernel para compilar, ele será usado em
/usr/include/linux
(e alguns outros), que geralmente fazem parte do pacote comokernel-headers
oulinux-headers
.fonte
O caminho de pesquisa padrão para arquivos de inclusão é
/usr/include
. Essa é uma propriedade do compilador C e, em teoria, diferentes compiladores podem usar caminhos diferentes, mas, na prática, todos procuram/usr/include
(e alguns outros locais dependentes do compilador).#include <sys/ioctl.h>
significa procurar um arquivo chamadosys/ioctl.h
relativamente a uma entrada no caminho de inclusão, portanto/usr/include/sys/ioctl.h
.Os cabeçalhos na fonte do kernel não são relevantes, a menos que você esteja compilando um módulo do kernel (ou o próprio kernel). Os cabeçalhos dos programas da terra do usuário vêm com a biblioteca C ou com o compilador C.
fonte