驱动中“位与”的问题
时间:2011-12-13
来源:互联网
代码情况如下:
ssize_t globalfifo_read(struct file*filp,char __user*buf,size_t count,loff_t *ppos)
{
....
if(filp->f_flags&O_NONBLOCK) //如果非阻塞
{
....
}
......
}
问题:
if(filp->f_flags&O_NONBLOCK) 表示如果非阻塞,其中应该涉及“按位与”的问题,只是过程不明白,f_flags“按位与”O_NONBLOCK 怎么就得到非阻塞?请高手指教!举例展示一下“按位与”过程!
ssize_t globalfifo_read(struct file*filp,char __user*buf,size_t count,loff_t *ppos)
{
....
if(filp->f_flags&O_NONBLOCK) //如果非阻塞
{
....
}
......
}
问题:
if(filp->f_flags&O_NONBLOCK) 表示如果非阻塞,其中应该涉及“按位与”的问题,只是过程不明白,f_flags“按位与”O_NONBLOCK 怎么就得到非阻塞?请高手指教!举例展示一下“按位与”过程!
作者: zhaozhigen 发布时间: 2011-12-13
按位与,就是某个bits位有一个为0则结果的对应的bits位为0,两个bits位都为1的时候,结果的对应的bits才为1.
这里的bits,是把数值转化成二进制之后的每个位的值。
O_NONBLOCK一定是定义成:0x01、0x02、0x04、0x08类似这样转化成二进制之后只有某个bits为1的数值。暂时叫做“标志宏”吧。
filp->f_flags的每个bits表征一种状态。
因此filp->f_flags和某个“标志宏”(只有一个bits为1的宏)做“按位与”运算的时候,除非filp->f_flags对应的那个bits上也为1,结果才不为0.
这里的bits,是把数值转化成二进制之后的每个位的值。
O_NONBLOCK一定是定义成:0x01、0x02、0x04、0x08类似这样转化成二进制之后只有某个bits为1的数值。暂时叫做“标志宏”吧。
filp->f_flags的每个bits表征一种状态。
因此filp->f_flags和某个“标志宏”(只有一个bits为1的宏)做“按位与”运算的时候,除非filp->f_flags对应的那个bits上也为1,结果才不为0.
作者: squiffy 发布时间: 2011-12-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28