我用插件系统(使用 NSBundle)编写了一个应用程序,一切正常,但我想处理在应用程序执行期间删除插件文件的情况。
我认为最好的方法是禁用删除已加载的插件文件(如 Windows 中的 dll,它们在应用程序加载时无法删除)
但在 OSX 中,即使应用程序使用了插件文件,也可以删除它。
应用程序使用插件文件时是否可以禁用删除插件文件?
或者至少可以在删除文件时收到通知,以便在删除插件文件时更新我的应用程序?
谢谢
我用插件系统(使用 NSBundle)编写了一个应用程序,一切正常,但我想处理在应用程序执行期间删除插件文件的情况。
我认为最好的方法是禁用删除已加载的插件文件(如 Windows 中的 dll,它们在应用程序加载时无法删除)
但在 OSX 中,即使应用程序使用了插件文件,也可以删除它。
应用程序使用插件文件时是否可以禁用删除插件文件?
或者至少可以在删除文件时收到通知,以便在删除插件文件时更新我的应用程序?
谢谢
我不认为您可以禁用删除加载的插件,但有可能监控文件系统的更改,这可能会有所帮助。
“文件系统事件 API”
使用文件系统事件 API,可以在指定目录的内容发生更改时通知您的应用程序。然后您必须自己扫描目录,例如检查哪些插件仍然存在或已被删除。
内核队列
这是一种更底层的方法,使用kqueue()
,kevent()
系统调用。例如,您可以注册一个文件描述符,如果unlink()
在引用的文件上被调用,则会收到通知。
文件系统事件编程指南中描述了这两种机制。还有一个示例项目Monitoring File Changes with the File System Events API。