2011-12-27 56 views
2

在windows上,我曾經使用一種技巧來查找文件當前正在使用(專門寫入)。通過其他進程檢測正在使用的文件

我用它來打開文件進行寫入,如果最失敗的情況是另一個進程正在忙於訪問它。

不幸的是,這些技巧(使用C OPEN與獨佔鎖寫入)在我的Mac上不起作用。雖然我在終端的curl仍在寫我的-fileBusy()檢查失敗。

使用F_GETLK在fd上調用fcnt時也不會顯示任何鎖定。

我有沒有機會檢測一個文件是否被另一個進程使用?

Ps>偵聽fsevents無法完成,因爲我的應用程序是在其他應用程序/進程創建後啓動的。

回答

1

你可以嘗試使用運行在NSTask下面的shell命令:

lsof -Fc path/to/thefile

這會給你有thefile打開的過程(ES)的進程ID和名稱。

+0

很好的建議。 lsof沒有可用的c API?開展任務將有效,但由於某種原因,我感到不安。 – 2011-12-27 20:05:59

+0

我不知道任何C POSIX API函數來完成相同的事情。我同意開啓NSTasks通常不是我最喜歡的做事方式,但到目前爲止我還不知道在這種情況下的替代方案。我很想找出一個! – 2011-12-27 22:44:47

+1

我發現了一個可能使用私有API的解決方案的更多信息:http://web.archiveorange.com/archive/v/SEb6ahosyxznFKzz63G1我仍在尋找更好的解決方案。 – 2011-12-28 09:02:51

相關問題