我希望在(直接或间接)给定目录下的任何文件被修改时通知我的代码。通过“修改”,我的意思是我希望在文件内容被更改、重命名或删除时通知我的代码;或者如果添加了新文件。对于我的应用程序,可能有数千个文件。
我看起来像 FSEvents,但它的技术概述部分说:
重要的一点是通知的粒度是在目录级别。它只告诉您目录中的某些内容发生了变化,但不告诉您发生了什么变化。
它还说:
文件系统事件 API 也不是为找出特定文件何时更改而设计的。对于这样的目的,kqueues 机制更为合适。
但是,为了在给定文件上使用 kqueue,必须打开文件以获取文件描述符。管理数千个文件描述符是不切实际的(而且可能会超过允许的最大打开文件描述符数)。
奇怪的是,在 Windows 下,我可以使用该ReadDirectoryChangesW()
功能,它正是我想要的。
那么如何在 Mac OS X 下做我想做的事呢?或者,换一种方式问:如何ReadDirectoryChangesW()
在用户空间中为 Mac OS X 编写等价物(并且这样做非常有效)?