使用 inotify 的 C 程序有助于理解代码
C program using inotify help in understanding code
我参考了 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 的手册页中没有提到它。
此按位与屏蔽了特定位 (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地方。任何 non-zero 值都被视为 "true".
从逻辑上讲,它正在测试 event
是否来自目录(而不是文件)。
按位与只是检查特定位是否已设置的一种简单(且非常常见)的方法。
手册页很清楚,如果设置了该位,则事件指的是目录。
我参考了 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 的手册页中没有提到它。
此按位与屏蔽了特定位 (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地方。任何 non-zero 值都被视为 "true".
从逻辑上讲,它正在测试 event
是否来自目录(而不是文件)。
按位与只是检查特定位是否已设置的一种简单(且非常常见)的方法。 手册页很清楚,如果设置了该位,则事件指的是目录。