我刚开始使用inotify,只是为了看看它是如何工作的,我遇到了一个奇怪的行为。所以我正在监控一个文件,我希望收到关于它开启和关闭的通知。
while(1)
{
i = 0;
length = read(fd[wid], buffer, BUF_LEN);
while (i < length)
{
struct inotify_event* event = (struct inotify_event*) &buffer[i];
if (event->mask & IN_OPEN)
printf("File opened!\n");
else if (event->mask & IN_CLOSE)
printf("File closed!\n");
i += EVENT_SIZE + event->len;
}
}
这是代码的一部分,不能达到我的预期。所以,我注意到的第一件事是,如果我运行我的程序并转到我拥有文件的文件夹,当我打开文件夹时,它会检测文件上的打开和关闭事件。这是为什么?我该如何解决?
另一件事是,当我打开实际文件时,它首先检测到一个打开事件(应该如此),但它也检测到一个关闭事件,即使我的文件仍然打开。再次,为什么会发生这种情况?这是什么解决方案?当我关闭文件时它没有检测到任何东西(我认为这是因为它已经错误地检测到一个关闭事件,因此它将文件视为已关闭)。
哦,还有一件事!如果我用LibreOffice Writer打开文件(并保持打开状态),它会检测到许多打开/关闭事件。然后等待一下,然后再次检测到许多开/关事件。