如果打开了文件,如何获得通知

时间:2018-08-24 07:52:39

标签: swift macos filesystems

因此,如果我有一个目录/dir,其中可以包含任意数量的文件 N ,并且这些文件可以位于/dir中的任何子目录中。如何打开/dir中的文件或其任何子目录来通知dir,以便得到通知?我不想观看所有文件并检查是否已为该文件获得锁。

我看过FSEvents,但是我很确定我不能这样做。

它用于macOS操作系统

任何人都可以向我指出正确的方向或知道解决方法

2 个答案:

答案 0 :(得分:1)

您可以使用kqueue,并且根据您要监视的事件可以被“通知”,例如,在您的情况下,您可以使用EVFILT_VNODE过滤器:

EVFILT_VNODE Takes a file descriptor as the identifier and the
             events to watch for in fflags, and returns when one
             or more of the requested events occurs on the
             descriptor.  

要获取您可以监视的所有事件的列表,请检查该人员:https://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2(在包括macOS在内的所有BSD中的实现都非常相似),请查看此答案以查看一些区别:https://stackoverflow.com/a/49521218/1135424 < / p>

答案 1 :(得分:1)

一种方法是编写内核扩展并使用Apple的https://dev.mysql.com/doc/refman/8.0/en/select-into.html框架。

然后,您将订阅Kernel Authorisation (KAuth)和KAUTH_FILEOP_OPEN操作。

这还需要用户界面应用程序与内核扩展进行通信,以接收文件操作的通知,因此,此方法将取决于您监视文件的要求,以了解这是否过于刻板。 / p>