Linux

linux中的“sys/ioctl.h”標頭檔

  • September 21, 2011

我在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-headersor linux-headers

包含文件的預設搜尋路徑是/usr/include. 這是 C 編譯器的一個屬性,理論上不同的編譯器可以使用不同的路徑,但實際上它們都在查找/usr/include(以及其他一些與編譯器相關的位置)。

#include <sys/ioctl.h>``sys/ioctl.h表示查找相對於包含路徑中的條目呼叫的文件,因此/usr/include/sys/ioctl.h.

除非您正在編譯核心模組(或核心本身),否則核心原始碼中的標頭是不相關的。使用者態程序的標頭檔隨 C 庫或 C 編譯器一起提供。

引用自:https://unix.stackexchange.com/questions/21203