2013-03-11 62 views

回答

1

从手册页之间的连结:

When the utility is called as unlink, only one argument, 
which must not be a directory, may be supplied. 

因此,在使用时取消链接,你不能将目录作为参数。

+0

当谈到Unix文件系统为什么只允许指向文件的链接而不是目录时,'计算机系统设计原理'给出了一个取消链接目录的例子,它在第100页。如果这个例子不合适,有没有更好的解释? – stonestrong 2013-03-11 13:11:05

4

unlink(2)只能删除一个文件,而rmdir(2)只能删除空目录。

如果要递归删除目录,则必须智能地使用两个系统调用。您可能会发现许多不同的递归删除实现,例如this one正在使用nftw,或者this one正在使用opendir/readdir

+0

假设我们有“a/b/c”,并且还有另一个“d/e”,其中e是c的硬链接,如果我们删除目录a及其子内容,那么e指向的是无效的? – stonestrong 2013-03-11 13:04:27

+0

我提到“计算机系统设计原理”,在这种情况下,e最终会成为一个不具有破坏性的悬挂参考。 – stonestrong 2013-03-11 13:34:01

+2

@stonestrong如果它是一个/符号/链接,它将以悬挂引用结束,但/ hardlink /将导致该文件的使用计数仍为1,因此文件仍然存在。你可以自己试试这个:'mkdir -p a/b; echo你好,世界\! > a/b/c; mkdir d; ln -s ../a/b/c d/e; ln a/b/c d/f; rm -rf a; cat d/e;猫d/f' – RolKau 2013-11-13 13:04:22

相关问题