0

如何检测添加到特定目录的新文件?

我正在寻找的是一个类似于 event_listener 的东西,用于创建新文件时。我对使用不断在目录中搜索新文件的循环不感兴趣,因为在将文件添加到目录时我需要文件名。

4

3 回答 3

1

不幸的是,没有原生的 Erlang API来执行你正在寻找的东西。

任何非轮询解决方案都必须依赖操作系统的特定 API。在 MacOS X 和 FreeBSD 上,您可以使用kqueue(2) API。在 Linux 上,您可以使用inotify(7) API。这两个 API 都与select(2)一起工作,您可以使用 Erlang 的driver_select函数来选择这些 API 提供的文件描述符。编写这样的驱动程序并不是特别困难。

您可以在 Github 上找到几个用于 inotify的驱动程序和一个用于 kqueue的驱动程序。

于 2014-10-22T14:14:36.930 回答
0

如果您正在使用类似 Unix 的操作系统,您应该考虑使用 inotifywait 工具。我刚刚在有用的系统工具周围找到了不错的 Erlang 包装器:https ://github.com/sdanzan/erlang-systools

于 2014-10-22T12:31:31.277 回答
0

inoteefy在 Linux api 之上为您提供了一个很好的基于侦听器的inotifyapi。收听更新的示例/tmp/

1> inoteefy:watch("/tmp/", fun(X) -> io:format("File event: ~p~n", [X]) end).       
ok
File event: {"/tmp/",[create],0,"foo.txt"}
File event: {"/tmp/",[open],0,"foo.txt"}
File event: {"/tmp/",[attrib],0,"foo.txt"}
File event: {"/tmp/",[close_write],0,"foo.txt"}

在这里我touch /tmp/foo.txt在启动手表后做

于 2014-10-22T14:23:54.190 回答