AFAIK,OS X 是 BSD 派生,它没有实际的强制文件锁定。如果是这样,即使我正在编写文件,我似乎也无法阻止其他程序的写入访问。
在这样的环境下如何保证文件的完整性?我的程序退出后我不在乎完整性,因为现在这是用户的责任。但至少,我认为在我的程序运行时我需要某种保证。
其他程序如何在没有强制锁定的情况下保证文件内容的完整性?尤其是数据库程序。如果有常用的技术或推荐的做法,请告诉我。
更新
我正在为非工程师用户的 GUI 应用程序的数据层寻找这个。目前,我的程序有这种情况。
数据太大,无法放入 RAM。甚至很难被暂时复制。所以它不能被原子读/写,并且应该在程序运行时直接从磁盘使用。
非工程师人员使用的长期运行的专业 GUI 内容编辑器应用程序。虽然用户不是工程师,但他们仍然可以使用 Finder 或其他程序同时访问文件。因此用户可以不小心删除或写入当前使用的文件。问题是用户不了解实际发生的情况,并期望程序至少在程序运行时处理文件完整性。
我认为在当前情况下保证文件完整性的唯一方法是,
- 使用系统范围的排他强制锁打开文件。现在该文件是程序的责任。
- 检查完整性。
- 在程序运行时将文件用作外部存储器。
- 写下所有的修改。
- 开锁。现在该文件是用户的责任。
因为 OS X 缺少系统范围的强制锁定,所以现在我不知道该怎么做。但我仍然相信有一种方法可以存档这种文件完整性,只是我不知道。我想知道其他人是如何处理这个问题的。
这个问题与我的编程错误无关。那是另一个问题。当前的问题是保护数据免受其他不遵守建议文件锁定的程序的影响。而且,用户通常是 root 并且程序以相同的用户运行,所以琐碎的 Unix 文件权限是没有用的。