Unix 手册阅读 - rmdir.2

查看原文

rmdir() 函数是命令 rmdir 的底层函数,它可以删除一个空目录。空目录的概念,在 Unix 编程中,是指只包含了 ... 这两项的目录。调用成功意味着:这个目录在文件系统系统中占用的空间被释放。

目录下有文件,意味着它的链接计数不为 0,也就是说,不是空目录。对这样的目录调用 rmdir() 会报错 ENOTEMPTY。

另外,值得一提的是,就算链接计数到 0 了,如果有进程还打开了这个目录,那么调用函数也会失败,报错 EBUSY。

衍生思考:

  • 文件系统节点下明明有 ... 两项,为什么还叫空目录呢?不妨将 ... 看作是进入和离开目录的门的门把手,而非是目录里的文件。
  • rmdir 为什么这么执着于删除空目录,而把删除递归删除文件这种事情交给 rm -r 呢?一个想法是 rmdir 和 mkdir 是一对逆操作,target 是 dir 这个东西。dir 下的文件,那可不一定是 dir,一般都是些普通文件。rmdir 只想做一件事情:删除 DIR,不想删多余的东西,大约算符合了 UNIX 的设计哲学 KISS 吧。