Intestazione "sys / ioctl.h" in Linux


8

ci sono Linux 2.6.32-26-generic

Quando cerco il codice sorgente di Linux per il file di ascolto "ioctl.h", vedo molte varianti. (per piattaforme diverse, immagino). vale a dire

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

Ma vedo che il file è incluso come #include <sys/ioctl.h>

Come funziona questa mappatura?


È più appropriato stackoverflow?
hari,

Risposte:


5

Credo che il file che viene incluso sia /usr/include/sys/ioctl.h(non da / usr / src / linux o alcuni). E sul mio sistema appartiene a glibc, non al kernel o alle intestazioni del kernel.

In realtà, nulla viene incluso dal sorgente del kernel - le intestazioni all'interno di / usr / src / linux (o giù di lì) vengono utilizzate solo per la compilazione del kernel. Se alcuni software necessitano di alcune intestazioni del kernel per la compilazione, ne usa uno in /usr/include/linux(e alcuni altri), che di solito fanno parte del pacchetto come kernel-headerso linux-headers.


3

Il percorso di ricerca predefinito per i file include è /usr/include. Questa è una proprietà del compilatore C, e in teoria diversi compilatori potrebbero usare percorsi diversi, ma in pratica guardano tutti /usr/include(e alcuni altri posti dipendenti dal compilatore).

#include <sys/ioctl.h>significa cercare un file chiamato sys/ioctl.hrelativamente a una voce nel percorso include, quindi /usr/include/sys/ioctl.h.

Le intestazioni nel sorgente del kernel non sono rilevanti a meno che non si stia compilando un modulo del kernel (o il kernel stesso). Le intestazioni per i programmi userland vengono fornite con la libreria C o con il compilatore C.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.