rmdir (2) 用于删除目录树

rmdir (2) used for directory tree removal

如果一个特定的文件系统支持廉价删除整个目录(包括里面的所有内容),是否可以接受 POSIX / Linux / de-让 rmdir 系统调用成功删除目录的事实标准,即使它不是空的?

rmdir(2) syscall 的联机帮助页指定了一个错误 ENOTEMPTY 可以(或应该?)返回。

根据 "official" 规范,http://pubs.opengroup.org/onlinepubs/9699919799//functions/rmdir.html,不。它清楚地写着

"仅当目录为空目录时才应将其删除。,

还有

如果目录不是空目录,rmdir() 将失败并将 errno 设置为 [EEXIST] 或 [ENOTEMPTY]。

无论如何,我怀疑这种支持廉价删除整个目录的文件系统不符合 POSIX,因为符合 POSIX 的文件系统需要检查 link 计数树中的每个文件,使操作不那么便宜。所以我想你可能会争辩说,由于文件系统无论如何都不符合 POSIX,它在系统调用语义上也有一些回旋余地..

还有另一个原因可能无法实现便宜的递归删除。即使可以删除顶级目录,内部深处的文件也可能没有允许删除的权限。如果文件只能比父文件具有更少的限制性权限,它可能会起作用,但这是另一种蠕虫病毒。