运行效果:

代码:

 #include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h> void MyTree(char szPath[],int deep)
{
//目录用于遍历
DIR *pDir;
//用于存储文件信息
struct dirent *pDent;
//子目录名字
char szSubPath[PATH_MAX]; //用于判断文件的类型
struct stat stInfo;
//用来遍历层数,格式输出
int i; //打开当前目录,获取目录列表
pDir = opendir(szPath);
//如果打开失败
if(pDir == NULL)
{
perror("Fail to opendir");
return;
} //不断循环
while()
{
//依次读取文件信息
pDent = readdir(pDir);
//如果读取失败,当前递归结束
if(pDent == NULL)
{
break;
} //如果获得了文件信息 //过滤掉当前目录(.)和上一层目录 (..)
if(strcmp(pDent->d_name,".")== || strcmp(pDent->d_name,"..")==)
{
continue;
} //格式输出
for(i=;i!=deep;i++)
{
printf("│ ");
} //如果是目录文件
if(pDent->d_type == DT_DIR)
{
//红色
printf("├── \033[0;31m%s\033[0m\n",pDent->d_name);
sprintf(szSubPath,"%s/%s",szPath,pDent->d_name);
MyTree(szSubPath,deep+);
}
else
{
stat(pDent->d_name,&stInfo);
//判断是否是普通文件
if(S_ISREG(stInfo.st_mode))
{
//判断是否有执行权限
if(stInfo.st_mode & )
{
//青色
printf("├── \033[1;32m%s\033[0m\n",pDent->d_name);
}
//不能执行的文件
else
{
printf("├── %s\n",pDent->d_name);
}
}
//是否是一个块文件
else if(S_ISFIFO(stInfo.st_mode))
{
printf("├── \033[1;42m%s\033[0m\n",pDent->d_name);
}
//其他文件
else
{
printf("├── %s\n",pDent->d_name);
} }
}
closedir(pDir);
} int main(int argc,char **argv)
{
//char szPath[PATH_MAX]; if(argc == )
{
chdir(argv[]);
} //getcwd(szPath,PATH_MAX);
//MyTree(szPath,0);
MyTree(argv[],); return ;
}

9.自己实现linux中的tree的更多相关文章

  1. linux中没有tree命令,command not found,解决办法

    在有网络的情况下: 1.包管理器安装 centos 中用  yum -y install tree ubuntu 中用  apt-get install tree 当然如果需要权限不要忘了在前面加上 ...

  2. 用python写一个类似于linux中的tree

    import os filePath = 'g:/File' j = 0 # 查找的深度计数 def tree(filePath,j): dir_now = os.listdir(filePath) ...

  3. 在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制

    参考资料 该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference .Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找 ...

  4. 【转载】Linux中常用操作命令

    说明:开始学习linux系统,为了方便查看,特转载一篇Linux中常用操作命令,转载地址:http://www.cnblogs.com/laov/p/3541414.html 正文: Linux简介及 ...

  5. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  6. linux中的优先搜索树的实现--prio_tree【转】

    转自:http://blog.csdn.net/bailyzheng/article/details/8041943 linux中的优先搜索树的实现--prio_tree prio_tree在linu ...

  7. Linux中的磁盘

    Linux的磁盘管理 (很重要请注意高能预警) 硬盘:几个盘片,双面,磁性颗粒, 处理速率不同步:借助于一个中间层 文件系统(FileSystem)     可以实现对磁盘行的文件进行读写     文 ...

  8. Linux内核Radix Tree(二)

    1.   并发技术 由于需要页高速缓存是全局的,各进程不停的访问,必须要考虑其并发性能,单纯的对一棵树使用锁导致的大量争用是不能满足速度需要的,Linux中是在遍历树的时候采用一种RCU技术,来实现同 ...

  9. linux中的权限

    第1章 显示或设置网络相关信息 1.1 ip address 与ifconfig 类似 [root@znix ~]# ip address 1: lo: <LOOPBACK,UP,LOWER_U ...

随机推荐

  1. ansible upload

    # 链接地址:https://www.cnblogs.com/xiaoxiaoleo/p/6626299.html # synchronize: 从拉取远程服务器文件,需要加mode: pull # ...

  2. Tomcat 日志切割

    一.installing 日志轮训工具 yum  install cronolog -y 二.安装.修改tomcat文件 wget  http://mirrors.shuosc.org/apache/ ...

  3. Java基础4一数组

    数组 数组是用来存储一组相同类型数据的数据结构 数组变量属于引用数据类型 数组中的元素可以是任何数据类型(基本类型和引用类型) 备注:数组中存放的都是相同数据类型的数据. 1.一维数组的声明 语法:数 ...

  4. LyX初步

    最近写毕业论文少量入手了LyX. 这个工具是两三年前在CTeX群里听说的.当时感觉太高大上,连Linux下用LaTeX都还没搞定,于是没想这个. 但是最近用了LaTeX模板感觉太麻烦,于是试着装了一下 ...

  5. 如何拿到阿里算法校招offer

    好多同学有问过怎么能拿到阿里算法类校招的offer,刚好看到这篇文章分享给大家,详情可以看原文链接,原文链接中有视频讲解. 师兄师姐的建议: 之前初学算法的时候上过的公开课和看过的书 1. Cours ...

  6. SQLServer之merge函数用法

    MERGE 目标表 USING 源表 ON 匹配条件 WHEN MATCHED THEN 语句 WHEN NOT MATCHED THEN 语句; 其中最后语句分号不可以省略,且源表既可以是一个表也可 ...

  7. 2nd

    Java语言基础(常量的概述和使用) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 字符串常量 用双引 ...

  8. Thread pool引起的程序连接数据库响应慢

    数据库版本:percona-mysql 5.6.16 ​在很长一段时间,都会出现程序连接数据库,出现响应慢的情况,正常在几到几十毫秒之间,但是偶尔会出现上百毫秒的情况: 开始由于开发重新设置并调整过程 ...

  9. equal height

    https://css-tricks.com/the-perfect-fluid-width-layout/ http://nicolasgallagher.com/multiple-backgrou ...

  10. mac 下安装 mariadb

    通过brew 安装: brew install mariadb 初始化数据库 cd /usr/local/Cellar/mariadb/10.0.10/scripts mysql_install_db ...