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

8

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

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

хари
источник
Это больше подходит для stackoverflow?
Хари

Ответы:

5

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

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

RVS
источник
3

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

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

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

Жиль "ТАК - перестань быть злым"
источник