Linux
linux中的“sys/ioctl.h”標頭檔
我在
Linux 2.6.32-26-generic
當我查看“ioctl.h”聽眾文件的 linux 原始碼時,我可以看到許多變體。(我猜對於不同的平台)。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
但我看到該文件被包含為
#include <sys/ioctl.h>
這個映射是如何工作的?
我相信包含的文件是
/usr/include/sys/ioctl.h
(不是來自 /usr/src/linux 或某些)。在我的系統上,它屬於 glibc,而不是核心或核心標頭檔。實際上,核心原始碼中沒有包含任何內容 - /usr/src/linux (或左右)中的標頭檔僅用於核心編譯。如果某些軟體需要一些核心標頭檔來編譯它使用
/usr/include/linux
(和其他一些)中的那些,它們通常是包的一部分,如kernel-headers
orlinux-headers
。
包含文件的預設搜尋路徑是
/usr/include
. 這是 C 編譯器的一個屬性,理論上不同的編譯器可以使用不同的路徑,但實際上它們都在查找/usr/include
(以及其他一些與編譯器相關的位置)。
#include <sys/ioctl.h>``sys/ioctl.h
表示查找相對於包含路徑中的條目呼叫的文件,因此/usr/include/sys/ioctl.h
.除非您正在編譯核心模組(或核心本身),否則核心原始碼中的標頭是不相關的。使用者態程序的標頭檔隨 C 庫或 C 編譯器一起提供。