在Mac OS X中支持ACL,有一种方法可以将文件声明为可写但不可删除。
这会导致原子写入问题,因为VFS rename
中delete
的{{3}}是预先存在的目标。如果您有一个您具有写权限的现有文件,则可能无法以原子方式写入:
只需附加一个表示deny delete
的ACL,并且原子写入(如各种Cocoa API实现 - 例如current implementation)将失败,而非原子写入将很快成功。
由于我对低级C代码的理解相当有限:
一个替代实现是否可行,只有轻微(插入您最喜欢的“次要”定义)头痛?
由于
丹尼尔
答案 0 :(得分:1)
一个可行的替代方案似乎是在临时目录中创建文件,然后在两个文件上调用exchangedata
。 HFS导出VOL_CAP_INT_EXCHANGEDATA
属性,因此应该可以使用。 vfs_syscalls.c中的相关检查表明只有读取和写入权限才能成功调用。