什么是macOS上强制文件锁定的替代方法?

时间:2017-05-30 22:55:51

标签: macos locking finder file-locking

我正在为macOS编写一个应用程序,其主要目标是以某种方式管理任意用户文件。 “管理”包括任意读/写/更新这些文件。管理在内部是离散事件,可能包含多个空闲时段。但是,它必须对用户显示。

注意:“用户”一词包括任何及所有用户活动(即通过Finder)或用户启动的流程(即用户打开的其他应用程序;虽然不是以root身份运行,但与我自己的应用程序的权限类似。)

我的应用程序不会将这些文件存储在自有容器(例如沙盒应用程序容器)中,而是在后台连续运行,跟踪这些文件,监视更改并根据需要进行管理。

此“管理”的持续时间可能从几毫秒到几个小时不等。

我正在尝试编写一个构造(即class / struct)来封装对这些“热”文件(即管理下的文件)的引用。在管理期间,用户不能能够读取/写入/删除这些文件,除非应用程序明确退出(通过正常退出/强制退出,无论如何)。

有什么方法可以“锁定”文件,以防止用户读/写/更新和/或甚至修改权限?

以下是两种可能的解决方案:

  • 将文件复制到未公开的位置,对其进行管理并覆盖旧文件。出于多种原因,这是不可取的:对于大型文件,复制是昂贵且不切实际的,用户没有明确意识到管理,也没有做任何事情来防止其他进程将文件视为“免费”。
  • 修改文件权限。我不确定这是否可能(请详细说明详细信息如果是的话!),但如果我的进程可以修改文件权限以防止用户访问,那么它将解决问题我的问题。但是,如果有任何事情要阻止我的应用程序“解锁”这些文件(无论是通过崩溃/强制退出等),它都会让用户无法访问这些文件。

第三种,但不是真正的解决方案,只是不试图“锁定”任何这些文件。我可以持续监控文件,并提醒用户任何故障。我真的不想这样做,因此问题。

第二种解决方案看起来很有希望。但是,我无法找到任何允许我与文件ACL(访问控制列表)连接的高级API。我甚至不确定我是否正确理解它是如何工作的,所以请随意在这个思想的基础上再把它变成一个具体的答案。

我也很好奇Finder似乎知道其他进程是否正在使用文件。再一次,我想我知道,但我不完全确定,所以最好在这里问一下主要问题。

0 个答案:

没有答案