2015-05-09 28 views
0

如果我移动同一分区上的文件,而我正在移动,应该将i节点的引用计数更新为2(因为我是第一次复制),然后再次将其减1(当我删除目录时条目)?移动文件时更新引用计数?

或者移动过程中引用计数未触及?

回答

1

当一个文件是“感动”,什么是真正发生的是,参考文件命名层i节点被改变,仅此而已。实际上,文件不会被复制。

认识到文件命名层纯粹是为了您的方便。文件系统本身只关心inode。即使目录通常是文件命名层的虚构。 (确实有些文件系统实际上在文件系统层上组织目录,例如ext2和ext3就不是这样)。

虽然技术上是这样的:在极短的时间内,在命名层中没有引用或两个对文件的引用,从系统调用的角度来看,这实际上是一个原子事务正在制定中,所以它对你而言并不重要,也不会成为竞争条件。

+0

谢谢,你能更准确地说明这一点:如果文件保存在同一个文件夹,如果我将文件移动到另一个文件夹,则inode的引用会发生更改,那么我必须删除dir项并添加dir项在一个新的目录中。在这个过程中,我会更新inode的引用计数吗?此外,这是一个操作系统明智的原子操作,但它不会硬件明智,对吗? – nick

+0

“移动”的唯一内容是文件名。实际文件(inode)不会移动或更改。唯一的一次,如果你将文件移动到另一个分区。试试这个实验:使用'ls -i'来查看目录中文件的索引节点。使用'mv'将其中的一个移动到另一个目录,并在新目录中的该文件上尝试'ls -i'。你会看到inode号码有* not *改变。 –

+0

@nick:根据文件系统的实现情况,可能会有一段短的时间间隔,在这段时间内,源文件的索引节点引用计数可能会增加。保证是,与目标文件名关联的inode如果在调用之前已经存在,则会被原子地替换。 – chqrlie

相关问题