对于一个简单的Unix或Linux文件系统,要移动一个文件,原理上似乎不难理解,
先撇开一些细节,我想过程大概是这样:得到这个文件所在的目录,从目录中删除对应的文件目录项,
再到目标目录中,添加一个目录项,如此就完成了移动。
但是具体实现时,我遇到了难题。因为文件系统可能被多个进程访问,所以从源目录中删除一个目录项,
需要对源目录加锁。往目标目录添加目录项,也是如此,需要对目标目录加锁。甚至还要对源文件加锁,
假如源文件是一个目录,要修改目录项"..",使其指向目标目录。
这么多的加锁操作,我怎么保证能一致性地完成呢?也许该用术语说,怎么当作一个原子或事务来完成呢?
另外,严格地说,还需要检查,目标目录的合理性:目标目录不可以是源目录的子目录,因为这样导致了目录之间的循环。
当我无论在做检查,或者在对文件或目录操作时,都不得不考虑,可能有另一个进程也可能在做同样的事情。说不定我要移动的文件已经被另一个进程移走了,说不定目标目录已经无效了....如此,让我觉得困难。所以我来寻求帮助。请问,如何实现文件的移动,使之既安全又完整呢?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |