Заголовок "sys / ioctl.h" в Linux

Я на 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>

Как это отображение работает?

Я считаю, что файл включен: /usr/include/sys/ioctl.h (не из / usr / src / linux или некоторых). И в моей системе это относится к glibc, а не к ядрам или заголовкам ядра.

Фактически, ничто не включается в исходный код ядра – заголовки внутри / usr / src / linux (или так) используются только для компиляции ядра. Если для какого-либо программного обеспечения требуются некоторые заголовки ядра для компиляции, они используются в /usr/include/linux (и некоторых других), которые обычно являются частью пакета, такого как kernel-headers или kernel-headers linux-headers .

Путь поиска по умолчанию для include-файлов – /usr/include . Это свойство компилятора C, и теоретически разные компиляторы могут использовать разные пути, но на практике все они смотрят в /usr/include (и несколько других мест, зависящих от компилятора).

#include <sys/ioctl.h> означает поиск файла с именем sys/ioctl.h относительно записи в пути include, таким образом /usr/include/sys/ioctl.h .

Заголовки в источнике ядра не актуальны, если вы не компилируете модуль ядра (или само ядро). Заголовки для программ userland поставляются с библиотекой C или с компилятором C.