2

我有两个文件,都是 1 字节大(仅包含“1”或“0”)。

现在在用 Clojure 编写的程序的主循环中,我想等到其中一个文件发生更改后再继续。这可以通过忙碌等待来完成,使用 slurp 轮询文件以进行更改。但这是对资源的浪费。

我怎么能不忙着等待呢?

4

2 回答 2

6

在 Java VM>7 上,我会说您可以使用 Watch Service API。您可以直接使用它,也可以使用现有的 Clojure 包装器之一,因为它们非常丰富

使用 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 尽可能使用本机文件系统支持文件更改通知。

于 2015-12-29T08:09:57.877 回答
0

为了完成 Nicolas 的回答,还有 https://github.com/wkf/hawk在 MacOS 上似乎更有效地工作。

于 2021-02-16T06:14:59.833 回答