aku berada Linux 2.6.32-26-generic
Ketika saya melihat ke dalam kode sumber linux untuk file pendengar "ioctl.h", saya bisa melihat banyak varian. (untuk platform yang berbeda, saya kira). yaitu
./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
Tapi saya melihat file itu dimasukkan sebagai #include <sys/ioctl.h>
Bagaimana cara kerja pemetaan ini?
linux
c
header-file
hari
sumber
sumber
stackoverflow
?Jawaban:
Saya percaya file yang dimasukkan adalah
/usr/include/sys/ioctl.h
(bukan dari / usr / src / linux atau beberapa). Dan di sistem saya itu milik glibc, bukan kernel atau kernel-header.Sebenarnya, tidak ada yang disertakan dari sumber kernel - header di / usr / src / linux (atau lebih) hanya digunakan untuk kompilasi kernel. Jika beberapa perangkat lunak memerlukan beberapa header kernel untuk dikompilasinya, gunakan yang di
/usr/include/linux
(dan sebagian lainnya), yang biasanya merupakan bagian dari paket sepertikernel-headers
ataulinux-headers
.sumber
Jalur pencarian default untuk menyertakan file adalah
/usr/include
. Ini adalah properti dari kompiler C, dan secara teori kompiler yang berbeda dapat menggunakan jalur yang berbeda, tetapi dalam praktiknya mereka semua mencari/usr/include
(dan beberapa tempat bergantung pada kompiler lainnya).#include <sys/ioctl.h>
berarti mencari file yang dipanggilsys/ioctl.h
relatif ke entri di jalur sertakan, dengan demikian/usr/include/sys/ioctl.h
.Header di sumber kernel tidak relevan kecuali Anda sedang menyusun modul kernel (atau kernel itu sendiri). Header untuk program userland datang dengan pustaka C atau dengan kompiler C.
sumber