V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaosen0624
V2EX  ›  程序员

Unix 如何做到拷贝正在使用中的文件?

  •  
  •   xiaosen0624 · 2015-05-29 11:12:38 +08:00 · 3049 次点击
    这是一个创建于 3465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前我了解到的是

    • windows会对使用中的文件加锁, 就无法在打开文件的时候进行拷贝
    • Unix 不会加文件锁, 即使打开的文件或者程序一样可以拷贝,

    问题:

    • 两者为何采用不同的方式处理?
    • Unix 如何做到不加锁的情况下, 确保拷贝的文件和源文件一致 ? 即拷贝时候进行了修改会怎么样?
    8 条回复    2015-06-11 11:05:54 +08:00
    seers
        1
    seers  
       2015-05-29 11:17:17 +08:00
    windows也可以拷贝正在使用的文件啊?
    hjc4869
        2
    hjc4869  
       2015-05-29 11:24:21 +08:00
    @seers 那要看文件是以什么方式打开的。如果是Read就可以,ReadWrite就不行。
    ffffwh
        3
    ffffwh  
       2015-05-29 12:33:28 +08:00
    好像unix的文件锁一直被吐槽
    Tiande
        4
    Tiande  
       2015-05-29 13:37:10 +08:00
    windows/unix 修改文件,保存前是否是先在 缓冲区 修改呢?
    如果是的话,那你拷贝的肯定是 源文件 而不是 正在修改的文件 喽。
    类似 vim notepad++ 都是可以在修改的时候 copy 的,因为他们打开的其实只是在 缓冲区的副本。

    拷贝的时候,数据要先读到内存的,一般情况下都是最后一次保存的文件版本。
    如果你能在复制到内存的过程中,改变文件内容,可能会对结果有影响吧。

    最后想请教 unix 是有特指啥吗? IBM? SUN?
    msg7086
        5
    msg7086  
       2015-05-29 20:02:07 +08:00
    Unix 如何做到不加锁的情况下, 确保拷贝的文件和源文件一致 ?

    << 并不能确保吧……
    xiaosen0624
        6
    xiaosen0624  
    OP
       2015-06-11 09:17:55 +08:00
    @dtdnqsb 没,这个我没说清楚.我指的是Mac OS
    xiaosen0624
        7
    xiaosen0624  
    OP
       2015-06-11 09:19:02 +08:00
    @msg7086 那就是说我在拷贝过程中,继续进行修改,得到的结果会是两份文件不完全相同? 实际上拷贝的是修改前的文件? 这个如何测试呢?
    msg7086
        8
    msg7086  
       2015-06-11 11:05:54 +08:00
    @xiaosen0624 你自己做下实验就知道了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5332 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:00 · PVG 16:00 · LAX 00:00 · JFK 03:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.