Objective c 检测其他进程正在使用的文件

Objective c 检测其他进程正在使用的文件,objective-c,macos,cocoa,file,file-in-use,Objective C,Macos,Cocoa,File,File In Use,在windows等平台上,我经常使用一个技巧来找出当前正在使用的文件(专门编写) 我经常打开文件进行写入,如果失败了,很可能另一个进程正忙于访问它 可悲的是,这些技巧(使用带有独占锁的C OPEN进行写入)在我的Mac上不起作用。当终端中的curl仍在写入时,我的-fileBusy()检查失败 使用F_GETLK对fd进行的fcnt调用也不会显示任何锁定 我是否有机会检测另一个进程是否正在使用某个文件 Ps>无法侦听fsevents,因为我的应用程序在其他应用程序/进程创建后启动 您可以尝试使用

在windows等平台上,我经常使用一个技巧来找出当前正在使用的文件(专门编写)

我经常打开文件进行写入,如果失败了,很可能另一个进程正忙于访问它

可悲的是,这些技巧(使用带有独占锁的C OPEN进行写入)在我的Mac上不起作用。当终端中的curl仍在写入时,我的-fileBusy()检查失败

使用F_GETLK对fd进行的fcnt调用也不会显示任何锁定

我是否有机会检测另一个进程是否正在使用某个文件


Ps>无法侦听fsevents,因为我的应用程序在其他应用程序/进程创建后启动

您可以尝试使用NSTask运行以下shell命令:

lsof-Fc路径/to/thefile



这将为您提供文件已打开的任何进程的进程ID和名称。

苹果通过电子邮件确认以下链接中描述的解决方案是有效的,不被视为私有API

更多信息:

好建议。是否没有适用于lsof的c API?启动任务会起作用,但出于某种原因,这让我不寒而栗。我不知道有哪个C POSIX API函数可以完成同样的任务。我同意启动NSTASK通常不是我最喜欢的做事方式,但到目前为止,我还不知道在这种情况下还有什么替代方法。我很想知道一个!我找到了一个可能使用私有API的解决方案的更多信息:我仍在寻找更好的解决方案。lsof在沙盒中不起作用。。。所以我对另一种方法感兴趣。。。但是链接指向莎士比亚^^^苹果没有将HTTP重定向到HTTPS,因此答案中的链接现在是-从过去看到苹果域URL没有激活SSL的爆炸。