gpt4 book ai didi

Tcl/Tk : why is file ignored by inotify?

转载 作者:行者123 更新时间:2023-12-02 04:46:52 25 4
gpt4 key购买 nike

我想在 tcl/tk 中使用 inotify 来监控一个文件。当文件内容改变时,proc“say”应该被执行。我的代码只适用于一次更改。如果我再次打开文件(我用 kwrite 打开它)并更改内容,则不会执行 proc。 “观看信息”向我显示,该文件仍被添加到实例中。 “watch read”显示标志设置为 i,这对我来说意味着文件被实例忽略。但我不知道,为什么文件被忽略了,我没有删除文件或其他东西。你能回答,为什么文件被忽略了吗?

这是带有发射的代码:

package require inotify

1.3

proc say {fd} {
puts "say hello"
}

if {[catch {set fd [inotify create "watch" "say"]} errfd]} {
puts "$errfd"
exit
}

puts $fd

7

if {[catch {watch add /home/server/Zwischenablage/pitt_an/pitt_an_dashboard.txt C} errwatch]} {
puts "$errwatch"
exit
}

watch info

/home/server/Zwischenablage/pitt_an/pitt_an_dashboard.txt 1 C

(这里我先编辑了文件)

say hello

watch info

/home/server/Zwischenablage/pitt_an/pitt_an_dashboard.txt 1 C

watch read

{watchid 1 flags i cookie 0 filename {}}

最佳答案

文档 (tcl-inotify.sourceforge.net) 说“i”标志意味着“监视已自动删除,因为文件已删除或其文件系统已卸载。”我查找了您用来修改文件的 kwrite,它会在保存时创建备份。这通常通过有效地将旧文件重命名为 .backup 并在保存时创建新文件来实现。

如果 kwrite 是这样做的,那么 inotify 运行正常 - 每次保存文件时,您都会创建一个新文件并删除旧文件,这会禁用您当前的 watch 。为了测试它,我将通过对文件执行简单的 touch 操作来“修改”文件,看看它是否按预期工作。

如果最终是这种情况,并且您仍然希望您的处理程序对已使用 kwrite 修改过的文件进行操作,那么您将需要使用 IN_ONESHOT 选项设置处理程序以在触发时完全删除自身,然后在退出之前让它在同名的新文件上设置一个新的 watch 。

关于Tcl/Tk : why is file ignored by inotify?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32135457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com