2015-12-17 19 views
0

我们正在编写一个C++/Objective C应用程序,可以在OSX上从版本10.7到现在(10.11)运行。使用什么API在OS X中执行读一致文件操作,类似于Windows卷影服务

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

但是,我找不到任何文档或在线文章讨论OS X中的类似功能。我知道,OS X在写入文件时不会锁定文件,因此有必要做一些特殊的操作确定我没有拿起正在修改中的文件?

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

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

回答

0

有几件事情:

  • 在Unix上,一旦你打开一个文件,如果它是取代(而不是修改),你的文件描述符继续访问你打开文件,而不是它的替代。
  • 许多应用程序将替换而不是修改文件,使用-[NSData writeToFile:atomically:]YESatomically:
  • 当他们写信给他们,但该锁是咨询不是强制性的,所以其他程序也必须选择加入咨询锁定系统受到影响。
  • 现代的做法是File Coordination。同样,这是一个应用程序必须选择的自愿系统。

没有什么功能与您在Windows上描述的非常相似。如果标准方法不能满足您的需求,您将不得不构建自定义的东西。例如,您可以制作您感兴趣的文件的副本,并在完成副本后将其与原始文件进行比较,以查看是否在复制时修改了该文件。如果原稿已经改变,您将不得不重新开始新的复制操作(或放弃)。您可以使用“文件协调”来至少最小化合作程序争用的可能性。

相关问题