Ниже приведен прототип вызова ioctl.
long ioctl(struct file *f, unsigned int cmd, unsigned long arg);
Почему третий аргумент ioctl по умолчанию имеет длину без знака? Несколько раз мы передаем указатель на него. Но он использует unsigned long.
Ниже приведен прототип вызова ioctl.
long ioctl(struct file *f, unsigned int cmd, unsigned long arg);
Почему третий аргумент ioctl по умолчанию имеет длину без знака? Несколько раз мы передаем указатель на него. Но он использует unsigned long.
В ядре unsigned long часто используется как замена указателям, поскольку указатели всегда имеют этот размер на каждой архитектуре. Ioctls также может принимать целое число в качестве аргумента, так что здесь это имеет смысл. Это должно быть определено для каждого ioctl.
Обратите внимание, что ioctls устарели и unlocked_ioctls должны использоваться в текущих версиях ядра: http://lwn.net/Articles/119652/