使用inotify 帮助理解代码的C 程序
Posted
技术标签:
【中文标题】使用inotify 帮助理解代码的C 程序【英文标题】:C program using inotify help in understanding code 【发布时间】:2016-01-23 19:19:14 【问题描述】:我指的是inotify 的手册页,我遇到了这段代码
if (event->mask & IN_ISDIR)
printf(" [directory]\n");
else
printf(" [file]\n");
其中 event 是指向结构 inotify_event
的指针。
我无法理解这一行 if (event->mask & IN_ISDIR)
以及为什么在此处使用 bitwise AND
。
如何确定bitwise AND
应该在这里使用而不是其他? inotify 的手册页中没有提到它。
【问题讨论】:
您链接的页面显示 “可能在 read(2) 返回的掩码字段中设置以下位:... IN_ISDIR 此事件的主题是目录。” 这是一个不同的函数,但表明这是一个位域。 【参考方案1】:这个按位与屏蔽了一个特定的位 (IN_ISDIR
)。它正在测试是否设置了这一位。如果在event->mask
中设置了此位,则计算结果为真。
例如,
#include <stdio.h>
#define FIRST_BIT 1
#define SECOND_BIT 2
#define THIRD_BIT 4
int main()
int x = 3; /* 3 in binary is 011 */
if ( x & FIRST_BIT )
printf("First bit is set\n");
if ( x & SECOND_BIT )
printf("Second bit is set\n");
if ( x & THIRD_BIT )
printf("Third bit is set\n");
会给出输出
First bit is set
Second bit is set
来自inotify.h
:
#define IN_ISDIR 0x40000000 /* event occurred against dir */
这个值只设置了一位。 (在二进制中,这是01000000000000000000000000000000
。)与此(0x40000000)和某个变量的按位与将评估为0(如果变量在这里有0),或者如果变量在同一个地方有1,则为0x40000000。任何非零值都被认为是“真”。
从逻辑上讲,它正在测试event
是否来自目录(而不是文件)。
【讨论】:
干净整洁。谢谢@e0k【参考方案2】:按位与只是检查是否设置了特定位的一种简单(并且非常常见)的方法。 手册页很清楚,如果设置了该位,则该事件是指一个目录。
【讨论】:
以上是关于使用inotify 帮助理解代码的C 程序的主要内容,如果未能解决你的问题,请参考以下文章