Oto wezwanie ioctl
w przestrzeni użytkownika:Skąd Linux wie, z której funkcji wywołać ioctl?
int ioctl(int fd, int cmd, ...);
O ile mi wiadomo, kiedy chcemy perfrom operacji IO, możemy zdefiniować własne ioctl
funkcję z zestawem wniosków (polecenia), przypisywać naszą ioctl
do file_operations struktury, jak to:
struct file_operations fops = {
.read = device_read,
.write = device_write,
.ioctl = device_ioctl, // device_ioctl is our function
.open = device_open,
.release = device_release,
};
a funkcja device_ioctl
jest definiowany różnie w stosunku do przestrzeni interfejs użytkownika:
static long device_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
Myślę, że w oparciu o deskryptor pliku, jądro może uzyskać odpowiednią strukturę plików i wywołać urządzenie ioctl
.
To tylko przypuszczenie, bo nie mogę go znaleźć ogólną definicję funkcji gdzie jądro wybiera odpowiedni ioctl
funkcję na podstawie deskryptora fd
przeszedł do rodzajowego ioctl
interfejsu? Są tylko 3 ioctl
definicje mogę znaleźć, ale widocznie to są tylko definicje tych urządzeń, a nie jądra: ioctl
proszę dać mi znać, co te kropki (**. **) oznaczają tutaj i jak to działa jako wskaźnik funkcji? Jestem ciekawy wiedzieć. – indranil