Tiêu đề của sys / ioctl.h trong linux


8

Tôi đang trên Linux 2.6.32-26-generic

Khi tôi tìm kiếm mã nguồn linux cho tệp trình nghe "ioctl.h", tôi có thể thấy nhiều biến thể. (đối với các nền tảng khác nhau, tôi đoán). I E

./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

Nhưng tôi thấy tập tin đó được bao gồm như #include <sys/ioctl.h>

Làm thế nào để ánh xạ này hoạt động?


Đây có phải là thích hợp hơn cho stackoverflow?
hari

Câu trả lời:


5

Tôi tin rằng tập tin đang được bao gồm là /usr/include/sys/ioctl.h(không phải từ / usr / src / linux hoặc một số). Và trên hệ thống của tôi, nó thuộc về glibc, không phải kernel hoặc tiêu đề kernel.

Trên thực tế, không có gì được bao gồm từ nguồn kernel - các tiêu đề bên trong / usr / src / linux (hoặc như vậy) chỉ được sử dụng để biên dịch kernel. Nếu một số phần mềm cần một số tiêu đề kernel để biên dịch, nó sử dụng các phần mềm trong /usr/include/linux(và một số phần mềm khác), thường là một phần của gói như kernel-headershoặc linux-headers.


3

Đường dẫn tìm kiếm mặc định cho các tệp bao gồm là /usr/include. Đây là một thuộc tính của trình biên dịch C và về lý thuyết, các trình biên dịch khác nhau có thể sử dụng các đường dẫn khác nhau, nhưng trong thực tế, tất cả chúng đều nhìn vào /usr/include(và một vài vị trí phụ thuộc vào trình biên dịch khác).

#include <sys/ioctl.h>có nghĩa là tìm kiếm một tệp được gọi là sys/ioctl.htương đối với một mục trong đường dẫn bao gồm, do đó /usr/include/sys/ioctl.h.

Các tiêu đề trong nguồn kernel không liên quan trừ khi bạn biên dịch một mô-đun kernel (hoặc chính kernel). Các tiêu đề cho các chương trình người dùng đi kèm với thư viện C hoặc với trình biên dịch C.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.