谈到目录相关函数的操做,我们不得不先说一下文件夹和目录的一点小的区别。文件夹是包括它里面的文件夹和文件的大小,目录是类似于书的目录,它只是告诉我们内容在第几页,它是不包括里面的内容。
其次,目录的本质是一个索引表,索引表由目录项组成,目录项是由文件名和索引号组成。
![](https://i-blog.csdnimg.cn/blog_migrate/67f040e0194d4ff18f811feb479cd287.png)
我们在Linux下新建一个目录时,系统会分配一个 i_node和至少一块block块给该目录。其中,i_node记录该目录的相关权限与属性以及该文件在数据域(block块)中的位置。而block则是记录在这 个目录下的文件名与该文件名占用的i_node号码数据。这也就是window下叫文件夹和Linux下叫目录的一点区别,因为它确实就是一个索引。这也解释了为什么明明所有文件都是在根目录下,却还可以放在不同的磁盘,因为目录与其下的子目录和文件,此时不是包含与被包含的关系,而只是一个索 引。
好了,言归正传,说完了这些,我们来看一下目录相关操作函数的用法:
1、opendir : 打开指定路径下的某一个目录
DIR *dp = opendir (const char *name )
参数 : name -----> 指定路径下的目录名
返回值 : 成功: 返回一个目录指针 (dp)
失败:NULL
2、readdir : 读取目录里面的文件名 (一次只能读取一个文件)
struct dirent *p = readdir ( DIR *dp )
参数 : dp ----> 目录指针
返回值 : 成功: 返回一个目录项指针 (p )
失败: NULL
注意 :1、 读取成功返回的目录项指针 p 是指向一个结构体 struct dirent ,结构体里面定义了表示一个文件的索引 号、类 型、大 小、名字等成员变量。
struct dirent
{
ino_t d_ino; 文件索引号
off_t d_off; 目录项的偏移量
unsigned short d_reclen; 目录项的大小
unsigned char d_type; 文件类型
char d_name[256]; 文件名
};
结构体中,文件类型( d_type )又分为7类:
DT_BLK 块设备文件 (b)
DT_CHR 字符设备文件 (c)
DT_DIR 目录文件 (d)
DT_FIFO 管道文件 (p)
DT_LNK 链接文件 (l)
DT_REG 普通文件 (-)
DT_SOCK 套接字文件 (s)
2、读取目录里面的文件失败返回NULL,所有文件全部读取完(成功读取)也是返回NULL
3、gercwd : 获取当前系统工作路径 (作用同 pwd 命令)
char *p = getcwd(char *buf, size_t size) (获取到的路径是绝对路径)
参数: buf -----> 用于存储 获取到的路径
size ----> 存储获取路径这个缓冲区的大小
返回值: 成功: 返回 存储 获取到的路径缓冲区(buf)的首地址
失败: 返回NULL
4、chdir : 改变当前系统工作路径
int ret = chdir(const char *path);
参数: path -----> 要切换的工作路径
返回值: 成功:0
失败:-1
!!! 最后附上一个代码截图 说明
菜鸟虽菜,但一直在学习的路上,决定开始写博客也是为了让自己慢慢 总结自己所学的东西,加深印象、慢慢消化,如果有写得不对的地方,希望各位大神不吝纠正。 小弟 先在这里谢过了 !!!