调用FSDeleteObject时的竞争条件

时间:2010-02-11 18:37:26

标签: macos file race-condition

我实施了一个“安全保存”操作,如下所示:

  1. 将一些数据保存到临时文件A
  2. A的内容复制到最终目的地B
  3. 删除A
  4. 我在第3步遇到竞争条件,当尝试使用fBsyErr删除文件时,Mac OS X偶尔会返回错误-47(FSDeleteObject)。我完全相信我是唯一一个修改此文件的人,并怀疑操作系统在我尝试删除文件时正在做某事(例如,后台缓存任务),从而导致错误。

    这是一个间歇性问题:通常FSDeleteObject通话工作正常。在那些我收到错误代码的情况下,当操作系统完成播放时,我想安全删除“稍后的时间”文件。

    尝试删除这个麻烦的临时文件时,最好的做法是什么?

1 个答案:

答案 0 :(得分:0)

Here's发生了什么:

  
      
  1. FSDeleteObject暂时失败fBsyErr的最常见原因是Spotlight正在索引文件。如果您修改文件,请将其关闭,然后立即尝试使用FSDeleteObject将其删除,Spotlight索引器很可能会将其打开,您将获得fBsyErr
  2.   
  3. 某些第三方防病毒扫描程序也可能会触发此问题。当您关闭修改后的文件时,防病毒扫描程序会立即开始检查它是​​否有病毒。如果您在尝试删除文件时仍在检查,FSDeleteObject将失败,并显示fBsyErr
  4.   

每个问题都有一系列的解决方法,两者的最佳选择是使用unlink