Unix 手册阅读 - rmdir.2
rmdir()
函数是命令 rmdir
的底层函数,它可以删除一个空目录。空目录的概念,在 Unix 编程中,是指只包含了 .
和 ..
这两项的目录。调用成功意味着:这个目录在文件系统系统中占用的空间被释放。
目录下有文件,意味着它的链接计数不为 0,也就是说,不是空目录。对这样的目录调用 rmdir()
会报错 ENOTEMPTY。
另外,值得一提的是,就算链接计数到 0 了,如果有进程还打开了这个目录,那么调用函数也会失败,报错 EBUSY。
衍生思考:
- 文件系统节点下明明有
.
和..
两项,为什么还叫空目录呢?不妨将.
和..
看作是进入和离开目录的门的门把手,而非是目录里的文件。 rmdir
为什么这么执着于删除空目录,而把删除递归删除文件这种事情交给rm -r
呢?一个想法是 rmdir 和 mkdir 是一对逆操作,target 是 dir 这个东西。dir 下的文件,那可不一定是 dir,一般都是些普通文件。rmdir 只想做一件事情:删除 DIR,不想删多余的东西,大约算符合了 UNIX 的设计哲学 KISS 吧。