如果某个特定的文件系统支持廉价删除整个目录(包含所有内容),那么POSIX / Linux /事实上的标准是否可以接受让rmdir
系统调用删除一个目录成功即使它不是空的?
rmdir(2) syscall的手册页指定错误ENOTEMPTY
可以(或应该?)返回。
答案 0 :(得分:1)
根据“官方”规范,http://pubs.opengroup.org/onlinepubs/9699919799//functions/rmdir.html,不。它明确地说
“只有当目录是空目录时才能删除该目录。,
并进一步
如果目录不是空目录,则rmdir()将失败并将errno设置为[EEXIST]或[ENOTEMPTY]。。
无论如何,我怀疑这样一个支持廉价删除整个目录的文件系统不符合POSIX,因为符合POSIX标准的文件系统需要检查树中每个文件的链接数,这使得操作不那么便宜。所以我想你可以争辩说,既然文件系统不是POSIX兼容的,它也可以在系统调用语义上留有一些余地。
答案 1 :(得分:0)
还有另一个原因可能导致无法实现廉价的递归删除。内部深层文件可能没有允许删除的权限,即使可以删除顶级目录。如果文件只能具有比父级更少的限制权限,它可以工作,但这是另一种蠕虫。