Я на Linux 2.6.32-26-generic
Когда я смотрю на исходный код Linux для файла-слушателя "ioctl.h", я вижу много вариантов. (для разных платформ, наверное). т.е.
./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
Но я вижу, что этот файл включен как #include <sys/ioctl.h>
Как работает это отображение?
linux
c
header-file
хари
источник
источник
stackoverflow
?Ответы:
Я считаю, что файл включен
/usr/include/sys/ioctl.h
(не из / usr / src / linux или какой-либо). И в моей системе это относится к glibc, а не к ядру или заголовкам ядра.На самом деле, ничего не включается из исходного кода ядра - заголовки внутри / usr / src / linux (или около того) используются только для компиляции ядра. Если какое-то программное обеспечение нуждается в некоторых заголовках ядра для компиляции, оно использует те в
/usr/include/linux
(и некоторые другие), которые обычно являются частью пакета какkernel-headers
илиlinux-headers
.источник
Путь поиска по умолчанию для включения файлов является
/usr/include
. Это свойство компилятора C, и теоретически разные компиляторы могут использовать разные пути, но на практике все они ищут/usr/include
(и некоторые другие места, зависящие от компилятора).#include <sys/ioctl.h>
означает поиск файла, вызываемогоsys/ioctl.h
относительно записи в пути включения, таким образом/usr/include/sys/ioctl.h
.Заголовки в исходном коде ядра не имеют значения, если вы не компилируете модуль ядра (или само ядро). Заголовки для пользовательских программ поставляются с библиотекой C или с компилятором C.
источник