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 ...
随机推荐
- 修复wordpress插件编辑器漏洞
具体方法,将下面的代码添加到您的配置文件 wp-config.php中: define( 'DISALLOW_FILE_EDIT', true ); 以此关闭插件编辑器功能,一切就这么简单,漏洞也就不 ...
- BeautifulSoup 库的使用记录
BeautifulSoup 有何用途 如果我们需要通过脚本来抓取网络中的数据时,使用传统的字符解析等方法时是非常低效的,而BeautifulSoup则可以方便的通过接口来获取标签中所想要得到的数据.主 ...
- 二分图的最大独立集 最大匹配解题 Hopcroft-Karp算法
二分图模型中的最大独立集问题:在二分图G=(X,Y;E)中求取最小的顶点集V* ⊂ {X,Y},使得边 V*任意两点之间没有边相连. 公式: 最大独立集顶点个数 = 总的顶点数(|X|+|Y|)- 最 ...
- asp、asp.net、ado、ado.net各自区别和联系?
asp.net与ado.net 的区别? asp.net是微软公司的.Net技术框架下的B/S(网页方向)框架技术.ado.net则是由asp.net编程语言编写的数据访问层的总括..说白了就是:as ...
- js手机网络检测
<!DOCTYPE HTML> <html lang="en"> <head> <meta charset=UTF-8"> ...
- ObjecT4:On-line multiple instance learning (MIL)学习
原文链接:http://blog.csdn.net/ikerpeng/article/details/19235391 用到论文,直接看翻译. 文章:Robust object tracking wi ...
- vs2012编译boost_1_54_0
在原文上进行了修改,我的环境是VS2012 ,在编译 注意事项:Boost 请慎用!微软太坑爹...且直接使用GitHub上的exe文件也可以,特定版本的只能自己编译了....汗!!! 原文地址:ht ...
- matplotlib简介-高质量图形输出
Matplotlib 是一个用来绘制二维图形的 Python 模块,它克隆了许多 Matlab 中的函数, 用以帮助 Python 用户轻松获得高质量(达到出版水平)的二维图形. 文章来源:http: ...
- Robot Framework(四)创建测试套件
2.3.1测试用例文件 Robot Framework测试用例是使用测试用例文件中的测试用例表创建的.这样的文件会自动从它包含的所有测试用例中创建一个测试套件.可以有多少测试用例没有上限,但建议少于1 ...
- linux下的头文件和库文件搜索路径 (转)
GCC 找头文件有三种策略: 1. 会在默认情况下指定到 /usr/include 文件夹 ( 更深层次的是一个相对路径, GCC 可执行程序的路径是 /usr/bin ,那么它在实际工作时指定头文 ...