我有两个文件,都是1字节大(只包含" 1"或" 0")。
现在在用Clojure编写的程序的主循环中,我想要等到其中一个文件发生变化才继续进行。这可以通过忙等待来完成,使用slurp轮询文件以进行更改。但这是浪费资源。
如果没有忙碌等待,我怎么能这样做?
答案 0 :(得分:4)
在Java VM> 7上,我想你可以使用Watch Service API。您可以直接使用它,也可以使用现有的Clojure包装器,因为它们有abundance个。
使用Clojure-Watch这是它的样子:
(ns clojure-watch.example
(:require [clojure-watch.core :refer [start-watch]]))
(start-watch [{:path "/home/niko/project/hello"
:event-types [:create :modify :delete]
:bootstrap (fn [path] (println "Starting to watch " path))
:callback (fn [event filename] (println event filename))
:options {:recursive true}}])
```
您可以收听文件修改,删除和创建。 Watch API尽可能使用本机文件系统支持进行文件更改通知。
答案 1 :(得分:0)
为了完成 Nicolas 的回答,还有 https://github.com/wkf/hawk 似乎在 MacOS 上工作效率更高。