免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1783 | 回复: 1
打印 上一主题 下一主题

[文件系统] 文件系统中,移动一个文件当如何实现? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-31 13:29 |显示全部楼层 |倒序浏览

对于一个简单的Unix或Linux文件系统,要移动一个文件,原理上似乎不难理解,
先撇开一些细节,我想过程大概是这样:得到这个文件所在的目录,从目录中删除对应的文件目录项,
再到目标目录中,添加一个目录项,如此就完成了移动。

但是具体实现时,我遇到了难题。因为文件系统可能被多个进程访问,所以从源目录中删除一个目录项,
需要对源目录加锁。往目标目录添加目录项,也是如此,需要对目标目录加锁。甚至还要对源文件加锁,
假如源文件是一个目录,要修改目录项"..",使其指向目标目录。

这么多的加锁操作,我怎么保证能一致性地完成呢?也许该用术语说,怎么当作一个原子或事务来完成呢?

另外,严格地说,还需要检查,目标目录的合理性:目标目录不可以是源目录的子目录,因为这样导致了目录之间的循环。

当我无论在做检查,或者在对文件或目录操作时,都不得不考虑,可能有另一个进程也可能在做同样的事情。说不定我要移动的文件已经被另一个进程移走了,说不定目标目录已经无效了....如此,让我觉得困难。所以我来寻求帮助。请问,如何实现文件的移动,使之既安全又完整呢?

  

论坛徽章:
0
2 [报告]
发表于 2013-07-31 17:42 |显示全部楼层
感谢jeppeter 和amarant 的回答,虽然我的问题没有马上解决,但起码让我得到了鼓励。
我是在写一个模拟文件系统的过程中遇到这个问题的。坦白说linux源代码我只看过0.11。所以请教有经验的人对这个问题的看法,以借鉴成熟系统是怎么处理的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP