Почему прототип вызова ioctl использует unsigned long в качестве третьего аргумента?

Ниже приведен прототип вызова ioctl.

long ioctl(struct file *f, unsigned int cmd, unsigned long arg);

Почему третий аргумент ioctl по умолчанию имеет длину без знака? Несколько раз мы передаем указатель на него. Но он использует unsigned long.


person Chinna    schedule 11.11.2013    source источник
comment
Эта страница: man7.org/linux/man-pages/man2/ioctl .2.html дает другой прототип и говорит, что третий аргумент раньше был указателем. Откуда именно вы берете свой прототип?   -  person John Zwinck    schedule 11.11.2013
comment
В официальном справочнике по POSIX это показано с многоточием. С другой стороны, POSIX утверждает, что этот вызов предназначен только для устройств STREAMS.   -  person Some programmer dude    schedule 11.11.2013


Ответы (1)


В ядре unsigned long часто используется как замена указателям, поскольку указатели всегда имеют этот размер на каждой архитектуре. Ioctls также может принимать целое число в качестве аргумента, так что здесь это имеет смысл. Это должно быть определено для каждого ioctl.

Обратите внимание, что ioctls устарели и unlocked_ioctls должны использоваться в текущих версиях ядра: http://lwn.net/Articles/119652/

person Stephan Roslen    schedule 11.11.2013