加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用硬链接进行Python copy-on-write

发布时间:2020-12-20 13:27:20 所属栏目:Python 来源:网络整理
导读:使用 Python 2.5,UNIX: 我有一个程序,通过硬链接所有条目来模拟目录“copy-on-write”功能.目前所有底层代码,其中一些我无法访问,使用标准open(fname,’w’)来编写常规文件. 但是使用硬链接,这意味着使用相同的inode(只是截断),因此原始内容也会被销毁.对于
使用 Python 2.5,UNIX:

我有一个程序,通过硬链接所有条目来模拟目录“copy-on-write”功能.目前所有底层代码,其中一些我无法访问,使用标准open(fname,’w’)来编写常规文件.

但是使用硬链接,这意味着使用相同的inode(只是截断),因此原始内容也会被销毁.对于copy-on-write,我当然希望原始文件保持不变(旧的inode)和open(‘w’)调用来创建一个新的inode.

有关实现这一目标的最佳方法的任何想法?猴子补丁以某种方式打开?

到目前为止我想出的是首先尝试删除文件(如果存在),然后再打开(‘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,**kwargs)

__builtin__.open = my_open

解决方法

你在找这样的东西吗?

import sys
old_open = __builtins__.open    

# Override builtin open()
def my_open(fname,**kwargs):
    # If the path is a hardlink,(ie,check that st_nlink >1)
    if os.path.isfile(fname) and os.stat(fname).st_nlink > 1: 
        os.unlink(fname)
    return old_open(fname,**kwargs)
__buitlins__.open = my_open

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读