Mac VFS / HFS +中是否可以进行原子重命名?

时间:2011-01-11 20:13:02

标签: osx-snow-leopard darwin vfs hfs+

在Mac OS X中支持ACL,有一种方法可以将文件声明为可写但不可删除。

这会导致原子写入问题,因为VFS renamedelete的{​​{3}}是预先存在的目标。如果您有一个您具有写权限的现有文件,则可能无法以原子方式写入:
只需附加一个表示deny delete的ACL,并且原子写入(如各种Cocoa API实现 - 例如current implementation)将失败,而非原子写入将很快成功。

由于我对低级C代码的理解相当有限:
一个替代实现是否可行,只有轻微(插入您最喜欢的“次要”定义)头痛?

由于

丹尼尔

1 个答案:

答案 0 :(得分:1)

一个可行的替代方案似乎是在临时目录中创建文件,然后在两个文件上调用exchangedata。 HFS导出VOL_CAP_INT_EXCHANGEDATA属性,因此应该可以使用。 vfs_syscalls.c中的相关检查表明只有读取和写入权限才能成功调用。