Header “sys / ioctl.h” di linux


8

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?


Apakah ini lebih tepat stackoverflow?
hari

Jawaban:


5

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 seperti kernel-headersatau linux-headers.


3

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 dipanggil sys/ioctl.hrelatif 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.