9.自己实现linux中的tree
运行效果:
代码:
- #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的更多相关文章
- linux中没有tree命令,command not found,解决办法
在有网络的情况下: 1.包管理器安装 centos 中用 yum -y install tree ubuntu 中用 apt-get install tree 当然如果需要权限不要忘了在前面加上 ...
- 用python写一个类似于linux中的tree
import os filePath = 'g:/File' j = 0 # 查找的深度计数 def tree(filePath,j): dir_now = os.listdir(filePath) ...
- 在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制
参考资料 该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference .Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找 ...
- 【转载】Linux中常用操作命令
说明:开始学习linux系统,为了方便查看,特转载一篇Linux中常用操作命令,转载地址:http://www.cnblogs.com/laov/p/3541414.html 正文: Linux简介及 ...
- 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 ...
- linux中的优先搜索树的实现--prio_tree【转】
转自:http://blog.csdn.net/bailyzheng/article/details/8041943 linux中的优先搜索树的实现--prio_tree prio_tree在linu ...
- Linux中的磁盘
Linux的磁盘管理 (很重要请注意高能预警) 硬盘:几个盘片,双面,磁性颗粒, 处理速率不同步:借助于一个中间层 文件系统(FileSystem) 可以实现对磁盘行的文件进行读写 文 ...
- Linux内核Radix Tree(二)
1. 并发技术 由于需要页高速缓存是全局的,各进程不停的访问,必须要考虑其并发性能,单纯的对一棵树使用锁导致的大量争用是不能满足速度需要的,Linux中是在遍历树的时候采用一种RCU技术,来实现同 ...
- linux中的权限
第1章 显示或设置网络相关信息 1.1 ip address 与ifconfig 类似 [root@znix ~]# ip address 1: lo: <LOOPBACK,UP,LOWER_U ...
随机推荐
- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build*解决办法
easy_install -U setuptools or pip install ipython 亲测有效
- SqlServer与MySql 系统表查询自建表数据
SqlServer: SELECT * FROM sys.sysobjects WHERE type='U' ORDER BY name SELECT * FROM sys.syscolumns WH ...
- apache出现You don't have permission to access / on this server提示的解决方法
在apache的配置文件httpd.conf里定义了对网站根默认的访问权限 #<Directory /> Options FollowSymLinks AllowOverrid ...
- 从操作系统内核看设计模式--linux内核的facade模式
linux的内核当中处处充满了设计模式,本文先讨论一下外观模式.外观模式就是将客户和子系统解耦,为客户将复杂的子系统进行封装,从而使得客户可以使用简单易用的接口. 众所周知,linux和unix是十 ...
- 详解优动漫PAINT中的图层模式
使用优动漫PAINT绘制漫画或者插画的时候,在其新建画布区域有一个基本颜色模式的选项,分别包括彩色模式.灰度模式和黑白位图模式,那么这三个模式有什么区别呢,我们在绘图的时候应该如何选择呢? 彩色模式: ...
- 【转】【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之缓存融合技术和主要后台进程(四)
原文地址:http://www.cnblogs.com/baiboy/p/orc4.html 阅读目录 目录 Cache Fusion 原理 什么是 Cache Fusion? 什么是高可用 FA ...
- jQuery中Ajax的几种写法
1. $.post(url,params,callback); 采用post方式提交,中文参数无需转码,在callback中如果要获取json字符串,还需转换一下. 2. $.getJSON(u ...
- 【数据分析学习】Pandas学习记录
import pandas as pd path = r'F:\数据分析专用\数据分析与机器学习\food_info.csv' with open(path, 'r') as f: data = pd ...
- Java JDK 1.7 和 JDK 1.8 新特性
0 引言 本文主要介绍 Java JDK 中 1.7 和 1.8 的新特性. 1 JDK 1.7 新特性 1. switch可以接受String类型: public class Switch { pu ...
- Linux分布式测试
在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能. 执行机和调度机做好 ...