使用 Python 2.5+,UNIX:
我有一个程序通过硬链接所有条目来模拟目录“写时复制”功能。目前所有底层代码,其中一些我无权访问,都使用标准open(fname, 'w')
来编写常规文件。
但是对于硬链接,这意味着使用相同的 inode(只是被截断),因此原始内容也会被破坏。对于写时复制,我当然希望原件保持不变(旧 inode)并open('w')
调用创建新 inode。
关于实现这一目标的最佳方法的任何想法?猴子补丁open
不知何故?
到目前为止,我想出的是open
首先尝试删除文件(如果存在),然后才这样做open('w')
:
import __builtin__
_open = __builtin__.open
def my_open(name, mode='r', *args, **kwargs):
"""Simulate copy-on-write, by deleting the file first if it exists"""
if 'w' in mode and os.path.exists(name): # TODO: use isfile()?
os.remove(name)
return _open(name, mode, *args, **kwargs)
__builtin__.open = my_open