监视正在运行的应用程序的文件访

时间:2011-06-02 21:05:27

标签: objective-c cocoa macos

是否可以在OSX上监控某些正在运行的应用程序的编程文件访问?创建/释放文件句柄/描述符?我需要知道某个应用程序何时从文件中读取并停止阅读。

1 个答案:

答案 0 :(得分:1)

我个人并没有亲自完成你所要求的,但这里有一些指示可能会让你开始。

Mac OS X附带一个命令行程序fs_usage,可以执行此操作,等等。您可以将其作为帮助应用程序启动并解析其输出。

$ sudo fs_usage -f filesys Safari
22:43:27  stat64            ry/Safari/Bookmarks.plist    0.000063   Safari      
22:43:28  lstat64           English.lproj/Browser.nib    0.000025   Safari      
22:43:28  getattrlist       English.lproj/Browser.nib    0.000014   Safari      
22:43:28  getattrlist       English.lproj/Browser.nib    0.000017   Safari      
22:43:28  open              English.lproj/Browser.nib    0.000017   Safari      
22:43:28  getdirentriesattr                              0.000039   Safari      
22:43:28  close                                          0.000008   Safari      

opensnoop做了类似的事情。

$ sudo opensnoop
  UID    PID COMM          FD PATH                 
  205    284 locationd     -1 /dev/dlci.spi-baseband.9 
  501   2836 Safari        11 /Users/zach/Library/Cookies/Cookies.plist 

opensnoop建立在dtrace之上,几乎可以肯定你想要的。它上面有一个不错的教程here

最后,如果您不介意使用私有API,则可以使用专为Spotlight构建的API,它为文件系统更改提供通知系统。 This tool建立在它之上。源代码可用。