微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法重新启动 inotify 目录观察程序

如何解决无法重新启动 inotify 目录观察程序

以下程序正在使用 inotify 监视目录。我已经设置了 OnesHOT,以便忽略后续事件。 但是,再次添加忽略的目录后,不会为后续事件触发任何事件。我很好奇这是预期的行为还是我做错了什么。我是 Go 的新手,所以后者很有可能。 我知道还有其他方法可以做到这一点,但我想先了解这种方法,然后再将其转储并尝试其他方法

到目前为止,我已经尝试了多个目录,第一个或最后一个有问题,添加删除的变化等等,都无济于事。 有什么想法吗?

package main

import (
    "log"

    inotify "github.com/sigma/go-inotify"
)

var InotifyFlags uint32 = (inotify.IN_OnesHOT | inotify.IN_DELETE_SELF | inotify.IN_CLOSE_WRITE | inotify.IN_MOVED_TO | inotify.IN_ATTRIB)

// inotify.IN_OnesHOT | inotify.IN_ONLYDIR |

func main() {

    watcher,err := inotify.NewWatcher()
    if err != nil {
        log.Fatal(err)
    }
    err = watcher.AddWatch("/tmp/foo",InotifyFlags)
    if err != nil {
        log.Fatal(err)
    }
    err = watcher.AddWatch("/tmp/foo2",InotifyFlags)
    if err != nil {
        log.Fatal(err)
    }
    for {
        select {
        case ev := <-watcher.Event:
            log.Println("event:",ev)
            if (ev.Mask & inotify.IN_IGnorED) == inotify.IN_IGnorED {
                log.Println("IGnorED:",watcher)
                // err = watcher.RemoveWatch("/tmp/foo")
                // if err != nil {
                //  log.Println("REM",err)
                // }
                err = watcher.AddWatch("/tmp/foo",InotifyFlags)
                if err != nil {
                    log.Println("Add",err)
                }
            }
        case err := <-watcher.Error:
            log.Println("error:",err)
        }
    }
}
ps > /tmp/foo/JD1
ps > /tmp/foo/JD2

输出

2021/07/27 15:45:01 event: "/tmp/foo/JD1": 0x8 == IN_CLOSE_WRITE
2021/07/27 15:45:01 event: "/tmp/foo": 0x8000 == IN_IGnorED
2021/07/27 15:45:01 IGnorED: &{{0 0} 3 map[/tmp/foo:0xc0000b8020 /tmp/foo2:0xc0000b8028] map[1:/tmp/foo 2:/tmp/foo2] 0xc0000940c0 0xc000094060 0xc0000c2000 false}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?