我有一個特定的文件,我想監視所有應用程序在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. 事件不掛鉤正確
- 2. TWebBrowser - 掛鉤接收事件
- 3. 如何掛鉤鍵事件
- 4. 掛鉤後掛起folder.Items.ItemAdd每個文件夾的事件
- 5. EGit掛鉤讀取超時
- 6. Android文件系統掛鉤
- 7. 掛鉤jQuery .toChecklist上的change()事件
- 8. 用TinyMCE掛鉤onExecCommand事件4
- 9. C#鉤掛javascript事件處理程序#
- 10. 掛鉤到C++ DLL事件形式C#
- 11. SetWinEventHook僅掛鉤來自「olemainthreadwndclass」的事件
- 12. 掛鉤在黑莓中重畫事件
- 13. YouTube Player IFrame API,currentTime的掛鉤事件
- 14. 無法掛鉤表單提交事件
- 15. 與事件掛鉤的觀察者
- 16. Mustache.js - 你如何掛鉤事件?
- 17. 轉到郎一套Windows事件掛鉤
- 18. JavaScript如何掛鉤WinRT事件?
- 19. 從win32事件掛鉤C++回調
- 20. Mvc3自定義事件掛鉤
- 21. 用.on()與JQUERY掛鉤事件
- 22. 用於保存文件的Windows事件掛鉤
- 23. 是否是一個程序掛鉤文件下載事件?
- 24. 有沒有辦法通過Applescript掛鉤到OSX睡眠/喚醒事件?
- 25. 以編程方式取消掛鉤事件處理程序
- 26. TensorFlow:讀取CSV文件永久掛起
- 27. InputStream.read()在讀取文件時掛起
- 28. 掛鉤粘貼事件隱藏文本區
- 29. 掛鉤保存文件對話框
- 30. 問題掛鉤NT DLL文件功能!
是的,我通讀喬納森的鏈接,得出了很多相同的結論。我一直在想辦法解決這個問題。當用戶說可能會工作時,通過命名管道推送文件內容 - 但我不認爲我可以推動EOF w/o關閉管道。也許我可以創建一個可以像管道一樣的設備,但它可以通過EOF? – rampion 2010-07-02 14:07:43
感謝您指向FUSE。我會檢查出來的! – rampion 2010-07-04 03:31:51