如何在OS X上没有强制文件锁定的情况下保证文件完整性?

Eon*_*nil 5 macos file data-integrity

AFAIK,OS X是BSD派生,没有实际的强制文件锁定.如果是这样,即使我正在编写文件,似乎也无法阻止从其他程序写入访问权限.

如何在这样的环境中保证文件的完整性?我的程序退出后我并不关心诚信,因为现在是用户的责任.但至少,我认为我的程序运行时需要某种保证.

其他程序如何保证文件内容的完整性而不强制锁定?尤其是数据库程序 如果有共同的技巧或推荐的做法,请告诉我.

更新

我正在为非工程用户寻找GUI应用程序的数据层.目前,我的计划有这种情况.

  • 数据太大,无法适应RAM.甚至很难被临时复制.所以它不能以原子方式读/写,并且应该在程序运行时直接从磁盘使用.

  • 一种长期运行的专业GUI内容编辑器应用程序,由非工程师使用.虽然用户不是工程师,但他们仍然可以使用Finder或其他程序同时访问该文件.因此,用户可以意外删除或写入当前使用的文件.问题是用户不了解实际发生的情况,并期望程序处理文件完整性,至少程序正在运行.

  • 我认为在当前情况下保证文件完整性的唯一方法是,

    1. 使用系统范围的独占强制锁打开文件.现在该文件是程序的责任.
    2. 检查完整性.
    3. 程序运行时,将文件用作外部存储器.
    4. 写下所有的修改.
    5. 开锁.现在该文件是用户的责任.

    因为OS X缺乏系统范围的强制锁定,所以现在我不知道该怎么做.但我仍然认为有一种方法可以存档这种文件完整性,这是我不知道的.我想知道其他人是如何处理的.

这个问题与我的编程错误无关.那是另一个问题.目前的问题是保护来自不遵守咨询文件锁定的其他程序的数据.而且,用户通常是root用户,并且程序与同一用户一起运行,因此琐碎的Unix文件权限没有用.

Eon*_*nil 1

以下是有关此主题的一些详细信息: https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileCoordinators/FileCoordinators.html

现在我认为 OSX 的基本策略是这样的。

  • 始终允许任何进程访问。
  • 始终为共享数据文件突变做好准备。
  • 当其他进程改变文件内容时收到通知,并对它们提供适当的响应。例如,如果其他进程尝试访问该文件,您可以向最终用户显示错误。然后用户就会知道这是不好的,并且不会再这样做。