当前位置: 技术问答>linux和unix
ioctl设备控制
来源: 互联网 发布时间:2017-01-15
本文导语: if(_IOC_DIR(cmd) & _IOC_READ) err = !access_ok(VERIFY_WRITE,(void *)arg,_IOC_SIZE(cmd)); else if(_IOC_DIR(cmd) & _IOC_WRITE) err = !access_ok(VERIFY_READ,(void *)arg,_IOC_SIZE(cmd)); if(err) return -EFAULT; _IOC_READ _IOC_WRITE //表示什么意思 _IOC_SIZE(cm...
if(_IOC_DIR(cmd) & _IOC_READ)
err = !access_ok(VERIFY_WRITE,(void *)arg,_IOC_SIZE(cmd));
else if(_IOC_DIR(cmd) & _IOC_WRITE)
err = !access_ok(VERIFY_READ,(void *)arg,_IOC_SIZE(cmd));
if(err)
return -EFAULT;
_IOC_READ
_IOC_WRITE //表示什么意思
_IOC_SIZE(cmd)//表示什么意思
逐行解释一下 谢谢!!!
|
宏而已,建议用source insight看Linux kernel source code.
|
access_ok:检查一个用户空间的指针是否是有效的。
@type:访问的类型:%VERIFY_READ或者%VERIFY_WRITE。注意%VERIFY_WRITE是%VERIFY_READ的一个超集(如果它是可写的一个块,它也是可以被读出来的)
@addr:所要坚持的用户空间的指针(指向的块开始部分)。
@size:所要坚持的块的大小。
检查一个用户空间的指针所指向的存储块是否有效,就是检查用户传入给驱动的设备指针是否有效
建议看一下 linux设备驱动开发 里面有介绍
@type:访问的类型:%VERIFY_READ或者%VERIFY_WRITE。注意%VERIFY_WRITE是%VERIFY_READ的一个超集(如果它是可写的一个块,它也是可以被读出来的)
@addr:所要坚持的用户空间的指针(指向的块开始部分)。
@size:所要坚持的块的大小。
检查一个用户空间的指针所指向的存储块是否有效,就是检查用户传入给驱动的设备指针是否有效
建议看一下 linux设备驱动开发 里面有介绍