想必大家和Linux打交道已经有好一段时间了,有一句话是这样说的“Linux下一切皆文件”,目录也不例外。

c语言选择结构总结(C语言中关于目录操作常用的几个接口)(1)

目录也是一种文件,因此操作流程与普通文件类似,有诸如打开、关闭、定位等概念,但目录是一种特殊的文件,目录存储的数据的最小单位并不是字符,而是目录项。这使得目录跟普通文件又有区别。

在Linux文件系统的经典结构中,目录不同于文件夹,目录的本质是索引,文件夹的本质是容器。

在Linux中,目录有几个要点

c语言选择结构总结(C语言中关于目录操作常用的几个接口)(2)

  1. 整个分区被分成两部分,一部分称为i节点域,另一部分数据域;i节点域记录的是整个分区的基本信息,包括分区可用空间和已用空间的管理信息;
  2. 每一个文件(包括目录本身)拥有一个唯一的标识,称为i节点号,分区使用i节点号管理并索引所有的文件,注意i节点号是分区内部的信息,就像美国的公民ID是美国内部管理信息一样,在中国是无效的,i节点号不能跨分区,这也是为什么使用命令 ln 创建文件别名不能跨分区的原因。
  3. 目录所存储的数据单元是目录项,目录项指的是结构体dirent,其内部保存的是文件的名称、i节点号等基本信息,不包含文件具体内容。

c语言选择结构总结(C语言中关于目录操作常用的几个接口)(3)

4.任何一个目录至少包含两个目录项:.和.. ,.代表当前目录,..代表上一级目录。如果本目录就是根目录,那么就没有上一级目录,..也代表本级目录。

打开、读取、关闭目录

与文件操作类似,要操作目录,首先是打开目录获取代表目录的“目录指针”,然后读取目录的基本单元“目录项”,最后关闭目录指针释放资源。操作函数如下:

opendir()

c语言选择结构总结(C语言中关于目录操作常用的几个接口)(4)

readdir()

c语言选择结构总结(C语言中关于目录操作常用的几个接口)(5)

closedir()

c语言选择结构总结(C语言中关于目录操作常用的几个接口)(6)

目录的创建与删除

mkdir()

c语言选择结构总结(C语言中关于目录操作常用的几个接口)(7)

rmdir()、unlink()和remove

c语言选择结构总结(C语言中关于目录操作常用的几个接口)(8)

,