0

我们正在编写一个 C++/Objective C 应用程序,可在 OSX 上从 10.7 版到现在 (10.11) 运行。

在windows下,有影子文件的概念,它允许你读取一个文件,因为它存在于某个时间点,而不必担心其他进程在此期间写入该文件。

但是,我找不到任何讨论 OS X 中类似功能的文档或在线文章。我知道 OS X 在写入文件时不会锁定文件,所以有必要做一些特别的事情来确保我不会t 选择一个正在修改的文件?

或者日志文件系统是否不需要任何特殊处理?我担心如果我有一个正在创建或修改文件的进程(例如,在 fopen 调用的单一上下文中 - 如果写入过程正在打开和关闭文件,我显然无法保证“完整性”在应该是原子操作的过程中重复),读取过程最终会得到一个“半生不熟”的文件。

如果 JFS 确实保证读者只能看到“整个”文件,这是否会扩展到可以作为外部驱动器安装的 Fat32 卷?

4

1 回答 1

0

一些东西:

  • 在 Unix 上,一旦你打开一个文件,如果它被替换(而不是修改),你的文件描述符继续访问你打开的文件,而不是它的替换。
  • 许多应用程序将替换而不是修改文件,使用 for 之类-[NSData writeToFile:atomically:]YES东西atomically:
  • 事实上,Cocoa 和其他高级框架确实会在写入文件时锁定文件,但这种锁定是建议性的,不是强制性的,因此其他程序也必须选择加入建议性锁定系统才能受到影响。
  • 现代方法是文件协调。同样,这是一个应用程序必须选择加入的自愿系统。

没有像您在 Windows 上描述的那样的功能。如果标准方法不足以满足您的需求,您将不得不构建一些自定义的东西。例如,您可以制作您感兴趣的文件的副本,并在您的副本完成后,将其与原始文件进行比较,以查看它是否在您复制时被修改。如果原件已更改,您将不得不重新开始复制​​操作(或放弃)。您可以使用文件协调至少将协作程序争用的可能性降至最低。

于 2015-12-17T22:32:09.973 回答