Inotify错误地检测到事件

时间:2015-02-16 08:12:48

标签: c linux events inotify

我刚开始使用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打开文件(并保持打开状态),它会检测到许多打开/关闭事件。然后等待一下,然后再次检测到许多开/关事件。

0 个答案:

没有答案