Ecco il ioctl
chiamata in spazio utente:In che modo Linux sa quale ioctl deve chiamare?
int ioctl(int fd, int cmd, ...);
Per quanto ne so, quando vogliamo perfrom operazioni di IO, definiamo la nostra funzione ioctl
con una serie di richieste (comandi), assegnare il nostro ioctl
ad una struttura come questa file_operations:
struct file_operations fops = {
.read = device_read,
.write = device_write,
.ioctl = device_ioctl, // device_ioctl is our function
.open = device_open,
.release = device_release,
};
E la funzione device_ioctl
è definito diversamente rispetto all'interfaccia spazio utente:
static long device_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
Penso basato sul descrittore di file, il kernel può ottenere la struttura di file appropriato e chiede il dispositivo di ioctl
.
questa è solo una supposizione, perché non riesco a trovare è la definizione della funzione generica in cui il kernel seleziona appropriata funzione ioctl
in base al file descrittore fd
passato nel interfaccia generica ioctl
? Ci sono solo 3 ioctl
definizioni posso trovare, ma a quanto pare questi sono solo le definizioni dei dispositivi, non il kernel: ioctl
può farmi sapere cosa significano questi punti (**. **) qui e come funziona come puntatore di funzione? Sono curioso di sapere. – indranil