![为什么 rmdir (系统调用)只适用于空目录?](https://linux22.com/image/184728/%E4%B8%BA%E4%BB%80%E4%B9%88%20rmdir%20%EF%BC%88%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%EF%BC%89%E5%8F%AA%E9%80%82%E7%94%A8%E4%BA%8E%E7%A9%BA%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
是否无法自动取消目录与其父级索引节点的链接?这背后有什么历史原因吗?
答案1
int rmdir(const char *pathname);
是一个系统调用,符合 POSIX.1-2001。现在想象一下这样一种情况,您希望此系统调用不只删除单个目录,而是删除其中的所有子目录和文件。
- 您必须将此逻辑添加到内核中,这不是一件容易的事,这样做会使内核膨胀
- 该操作在执行时间方面变得不确定
- 有很多种方法可能会导致处理失败,而这些方法在内核中没有多大意义。
答案2
这是一个功能,不是一个缺陷!
人们可以使用 轻松删除空目录rmdir *
,同时保留非空目录。这是我经常使用的系统管理实践。
有rm -rf
删除整个目录树(所有文件和子目录)。