黑马程序员C语言教程:Linux 文件目录树的遍历_黑马程序员c语言教程

2020-02-28 其他范文 下载本文

黑马程序员C语言教程:Linux 文件目录树的遍历由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“黑马程序员c语言教程”。

Linux 文件目录树的遍历

1. linux提供opendir、readdir(readdir_r)、closedir和scandir等接口实现对目录的读取;

2. readdir返回指向下一个目录项的指针,如果要自己传入缓冲区存储目录项,应使用readdir_r代替。readdir的结果中包含当前目录和上一级目录的目录项信息。

3. 在遍历过程中,进程的工作目录不会改变,在递归遍历的时候,需要改变工作目录(chdir)以识别相对路径,或者每次都限定全局路径。

4. 深度优先遍历目录树采用递归实现易编码(参见如下代码),广度优先遍历则需借助队列实现。当目录下的文件数量较少时,采用广度优先遍历效率会更高,因目录下的目录项基本都是连续存放,减少了很多磁盘寻道;而采用深度优先遍历,结果的聚合性更高

1.int dir_traverse(const char *dir_name)2.{

3.DIR *dirp = opendir(dir_name);4.if(!dirp){

5.perror(“opendir”);6.return-1;7.} 8.9.struct stat st;10.struct dirent *dir;11.char fullpath[FILENM_MAX];

12.while((dir = readdir(dirp))!= NULL){

13.if(!strcmp(dir->d_name, “.”)|| // 考虑当前目录和上级目录,否则会死循环 14.!strcmp(dir->d_name, “..”)){ 15.continue;16.}

17.18.sprintf(fullpath, “%s/%s”, dir_name, dir->d_name);//获取全局路径 19.printf(“%sn”, fullpath);// 打印路径 20.if(lstat(fullpath, &st)

}

24.if(S_ISDIR(st.st_mode)){

25.dir_traverse(fullpath);// 递归遍历子目录 26.} 27.28.} 29.30.closedir(dirp);31.32.return 0;33.}

访问目录下某个文件时,需要逐个读取目录数据中的目录项并与目标进行匹配获得文件的inode号,假设文件的平均长度为10byte,加上inode、type及reclen等信息,每个目录项的平均长度为16byte,假设采用4K的数据块,则一个块可以存放256个目录项,按照ext2文件数据索引的方式,当目录下文件数n少于256*12时,则在目录下查找文件最多需要访问n/256(向上取整)个数据块,当目录下文件数更多的时候,需要访问的块数会更快的增加(后面得到存储数据的物理块号需要多级索引),这也是在目录下不应放太多文件的原因,如果将拥有很多文件的目录均分成多个子目录,多一级目录会多一次(或多次,具体依赖于子目录下文件数量)磁盘块访问,但在子目录中查找文件的磁盘访问开销会小很多。

黑马程序员c语言教程:SQL函数

大小写控制函数 大小写控制函数 字符控制函数数字函数ROUND 函数TRUNC 函数MOD 函数......

黑马程序员c语言教程:多表查询

1 笛卡尔积 部门表 笛卡尔积产生结果: 行数 两个表相乘列数: 行数相加 原因条件等值连接select ****from tab1, tab2where tab1.a = tab2.a1 select count(e.ename)2 from......

黑马程序员c语言教程:Oracle指令

--sql structured query language --DML--Data Manipulation Language--数据操作语言 query information (SELECT), add new rows (INSERT), modify existing rows (UPDATE)......

黑马程序员c语言教程:Oracle概念

一、选择行1.简单的SELECT 语句SELECT 字段名1 [AS] '字段名1 解释' FROM table; 2.处理NULL NVL函数可把NULL转换成其它类型的符号编程技巧: NVL函数在多条件模糊查询的......

黑马程序员c语言教程:Oracle指令

------------------------- --order by的用法--员工信息按照姓名正序排列select * from emp order by ename asc; --员工信息按照倒叙排列select * from emp order by ename......

《黑马程序员C语言教程:Linux 文件目录树的遍历.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
黑马程序员C语言教程:Linux 文件目录树的遍历
点击下载文档
相关专题 黑马程序员c语言教程 遍历 黑马 程序员 黑马程序员c语言教程 遍历 黑马 程序员
[其他范文]相关推荐
[其他范文]热门文章
下载全文