使用 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 的指针。

此按位与屏蔽了特定位 (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 是否来自目录(而不是文件)。

按位与只是检查特定位是否已设置的一种简单(且非常常见)的方法。 手册页很清楚,如果设置了该位,则事件指的是目录。