我有一个特定的文件,我想监视所有应用程序在OSX上的文件读取尝试。我希望能够中断请求,以便我可以决定哪些应用程序有权读取文件,哪些没有(通过查询用户或检查用户响应缓存)。这可能与OSX API?如果不是,甚至有可能获得哪些应用程序或进程读取文件的列表?OSX:挂钩文件读取事件
回答
我不是说有没有办法做到这一点,但什么@Jonathan讲的是不是。
该API用于跟踪文件的创建,更改和销毁。值得注意的是,Spotlight之类的工具使用该工具来观察文件系统上新的有趣文件的活动。
但明智的是,阅读不是它追踪的事件之一。
即使读数跟踪,但它仍然是错误的机制,因为它是在事后通报制度,不符合调用本身线。
我认真地怀疑你想要的可能是你描述它的方式。
通过访问控制列表,你可以限制用户级访问(弗雷德可以读取该文件,但鲍勃不能)。这是文件本身的设置。但是没有机制允许Bobs App1读取文件,而Bobs App2则无法读取文件,因为除了要执行的命令之外确实没有“应用程序身份”的正式机制,或者程序“说”其名称是(无论是哪一种如果动机足够,可以被欺骗)。
然而,随意抓取达尔文源 - 毫无疑问,答案是埋在那里的某个地方开(2)调用附近。
编辑,关于评论。
你想做什么?什么是总体情况?
您可能想尝试的另一件事是使用FUSE。
FUSE是一个实用工具,让您拥有“用户空间文件系统”。人们为了许多目的使用FUSE,比如读取NTFS卷,或者通过SSH挂载远程系统。
他们有一个简单的例子,它给你一个你可以为你的目的填写的框架。
对于大多数使用情况,您将简单地遵循系统。但是,对于OPEN,您将添加您的逻辑。然后你可以将你的FUSE工具指向一个目录,并“挂载”它。然后,该目录下的所有文件都可以使用您的新行为。
我还是不知道你将如何通过名称来识别应用程序,但如果它不是一个真正的“安全”问题,只是局部控制,我想像你能拿出的东西。活动监视器有应用程序名称,所以它们必须可用,并且FUSE将在流程空间内运行(我认为),而不是通过某种外部机制。所有这一切说,我认为FUSE是你最好的选择,但如果你想这样做“任何文件”,而用户没有做好准备(比如不安装FUSE),那么这可能是不合适的。如果你想做“任何文件”,你的FUSE系统将需要在根目录下安装,然后你只需拥有一个完整的“克隆”文件系统,这些文件来自普通根目录“不受保护”,而那些从您的新FUSE根将受到保护。因此,如果有人不想使用FUSE系统,真实文件可以通过实际文件位置随时获取。
阿米特辛格的着作应该非常方便。他explored几年前提供FileSystem事件的API,并提供了一个允许您拦截FS事件的sample tool。它是开源的!
如果我还记得他的结论正确,他们不是一个官方的API,但你可以使用苹果的工具来实现你想要什么。
如果没有,是否有可能获得哪些应用程序或进程读取文件的列表?
命令行工具fs_util允许您监视文件系统活动,包括读取。
- 1. 挂钩Outlook事件
- 2. 获取事件挂钩到Console.WriteLine
- 3. 事件不挂钩正确
- 4. 不能挂钩事件
- 5. 推事件GitLab挂钩
- 6. TWebBrowser - 挂钩接收事件
- 7. 如何挂钩键事件
- 8. 挂钩后挂起folder.Items.ItemAdd每个文件夹的事件
- 9. EGit挂钩读取超时
- 10. 挂钩到文件中,实时读取新内容
- 11. Android文件系统挂钩
- 12. C#钩挂javascript事件处理程序#
- 13. YouTube Player IFrame API,currentTime的挂钩事件
- 14. Mustache.js - 你如何挂钩事件?
- 15. 可能挂钩ReadProcessMemory()的事件?
- 16. WPF的DataGrid不挂钩事件
- 17. 挂钩在黑莓中重画事件
- 18. 转到郎一套Windows事件挂钩
- 19. WPF烦恼挂钩CollectionChanged事件
- 20. SetWinEventHook仅挂钩来自“olemainthreadwndclass”的事件
- 21. 挂钩jQuery .toChecklist上的change()事件
- 22. 用.on()与JQUERY挂钩事件
- 23. 挂钩到C++ DLL事件形式C#
- 24. 用TinyMCE挂钩onExecCommand事件4
- 25. 与事件挂钩的观察者
- 26. 无法挂钩表单提交事件
- 27. 从win32事件挂钩C++回调
- 28. JavaScript如何挂钩WinRT事件?
- 29. Mvc3自定义事件挂钩
- 30. 用于保存文件的Windows事件挂钩
是的,我通读乔纳森的链接,得出了很多相同的结论。我一直在想办法解决这个问题。当用户说可能会工作时,通过命名管道推送文件内容 - 但我不认为我可以推动EOF w/o关闭管道。也许我可以创建一个可以像管道一样的设备,但它可以通过EOF? – rampion 2010-07-02 14:07:43
感谢您指向FUSE。我会检查出来的! – rampion 2010-07-04 03:31:51