0

我用插件系统(使用 NSBundle)编写了一个应用程序,一切正常,但我想处理在应用程序执行期间删除插件文件的情况。

我认为最好的方法是禁用删除已加载的插件文件(如 Windows 中的 dll,它们在应用程序加载时无法删除)

但在 OSX 中,即使应用程序使用了插件文件,也可以删除它。

应用程序使用插件文件时是否可以禁用删除插件文件?

或者至少可以在删除文件时收到通知,以便在删除插件文件时更新我的​​应用程序?

谢谢

4

1 回答 1

1

我不认为您可以禁用删除加载的插件,但有可能监控文件系统的更改,这可能会有所帮助。

  1. “文件系统事件 API”

    使用文件系统事件 API,可以在指定目录的内容发生更改时通知您的应用程序。然后您必须自己扫描目录,例如检查哪些插件仍然存在或已被删除。

  2. 内核队列

    这是一种更底层的方法,使用kqueue(),kevent()系统调用。例如,您可以注册一个文件描述符,如果unlink()在引用的文件上被调用,则会收到通知。

文件系统事件编程指南中描述了这两种机制。还有一个示例项目Monitoring File Changes with the File System Events API

于 2012-10-02T17:02:47.970 回答