为什么ioctl调用的原型使用unsigned long作为第三个参数?

为什么ioctl调用的原型使用unsigned long作为第三个参数?,c,linux,linux-device-driver,device-driver,ioctl,C,Linux,Linux Device Driver,Device Driver,Ioctl,下面是ioctl调用的原型 long ioctl(struct file *f, unsigned int cmd, unsigned long arg); 为什么ioctl的第三个参数默认为无符号长?有时我们传递一个指向它的指针。但是它使用的是无符号long。在内核中,无符号long经常被用作指针的替代品,因为指针在每个体系结构上都有这样的大小Ioctls也可以将整数作为参数,因此这在这里很有意义。必须为每个ioctl定义此项 请注意,IOCTL已被弃用,并且未锁定\u IOCTL必须在当前

下面是ioctl调用的原型

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

为什么ioctl的第三个参数默认为无符号长?有时我们传递一个指向它的指针。但是它使用的是无符号long。

在内核中,无符号long经常被用作指针的替代品,因为指针在每个体系结构上都有这样的大小Ioctls也可以将整数作为参数,因此这在这里很有意义。必须为每个ioctl定义此项

请注意,IOCTL已被弃用,并且未锁定\u IOCTL必须在当前的内核版本中使用:

此页面:给出了不同的原型,并指出第三个参数过去是指针。你的原型是从哪里来的?图中用省略号表示。另一方面,POSIX声明此调用仅适用于流设备。