
私はここにいるLinux 2.6.32-26-generic
"ioctl.h"リスナーファイルのLinuxソースコードを見ると、さまざまなバリエーションを見ることができます。 (他のプラットフォームの場合)。つまり
./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>
このマッピングはどのように機能しますか?
答え1
私は含まれているファイルが/usr/include/sys/ioctl.h
(/usr/src/linuxや他のファイルではない)と思います。私のシステムでは、カーネルやカーネルヘッダではなくglibcに属しています。
実際、カーネルソースには何も含まれていません。 /usr/src/linux (または何でも) 内のヘッダーはカーネルのコンパイルにのみ使用されます。一部のソフトウェアでコンパイルするためにいくつかのカーネルヘッダが必要な場合は、通常、次のパッケージの一部である/usr/include/linux
(および他のいくつかの)カーネルヘッダを使用します。kernel-headers
linux-headers
答え2
インクルードファイルのデフォルトの検索パスはです/usr/include
。これはCコンパイラの属性であり、理論的には複数のコンパイラが異なるパスを使用することができますが、実際にはすべて/usr/include
(いくつかの異なるコンパイラ依存位置と一緒に)見えます。
#include <sys/ioctl.h>
sys/ioctl.h
含むパスのエントリに基づいて検索が呼び出されることを示します/usr/include/sys/ioctl.h
。
カーネルモジュール(またはカーネル自体)をコンパイルしない限り、カーネルソースのヘッダーは関係ありません。ユーザモードプログラムのヘッダファイルは、CライブラリまたはCコンパイラに付属しています。