* 根据命令类型,检测参数空间是否可以访问 */
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_DIR(cmd) & _IOC_READ)中的‘&’是与的意思吗? 这段代码不是判断 发出的指令如果是_IOC_READ 就执行下面的语句 小弟想问的是 & 能判断出 两边的二进制 是一样的吗?
------解决方案--------------------
“&”是与的意思,(_IOC_DIR(cmd) & _IOC_READ)这段代码是:从command中取出它的“方向”(是读 是写),然后再判断是否是read;
&可以判断两边的二进制数的某一位是否一样,如:二进制数0011和0001比较(第二个数表示是要判断哪一位),0011&0001=1,说明第一个数的最后一位是1,与第二个数的最后1位相同;如果是1110和0001比较,1110&0001=0,说明第一个数的最后一位是0,与第二个数最后1位不同
------解决方案--------------------
这样理解:
如果两边是相同的二进制位为1(例如:001 & 001),则“与”后,大于0,if()条件为真,就执行;
如果两边是不相同的二进制位为1(例如:010 & 001),则“与”后,等于0,if()条件为假,就不执行;
------解决方案--------------------
很简单三,读可以再看写可以不,如果写也可以就是读写,写不可以就是只读;一个宏只判断某一位,其他位又分别留其他宏判断,互不冲突,有什么关系?
------解决方案--------------------