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 ...
随机推荐
- week2 notebook2
Beginning day2: 1.基础数据类型宏观: 1.1.整型:int:1,2,3 1.2.字符串:str:‘anthony’ 1.2.1: 索引:索引即下标,就是字符串组成的元素从第一个开始, ...
- LayoutInflater源码解析
Android使用LayoutInflater来进行布局加载,通常获取方式有两种: 第一种: LayoutInflater layoutInflater = LayoutInflater.from(c ...
- WRAR下载及注册
下载过程: 1.打开winrar官网:https://www.win-rar.com 2.点击下载winrar按钮,如上图所示 3.进入下一页面,点击下载按钮即可完成下载过程 注册过程:https:/ ...
- SQL Server数据库备份的几个建议
1.定期进行数据备份(完备或差异备份)和日志备份. 2.使用压缩备份来减少磁盘空间占用和提高备份效率. 3.定期检查磁盘剩余空间和备份文件增长情况,以确保有足够空间进行下一次备份. 4.使用校验和(C ...
- Mac使用ssh登录远程linux系统查看jetty日志及同时使用github工具
转载请注明出处:http://www.houxiurong.com/?post=27 Mac默认是安装了ssh工具软件的. 先用mac的 终端工具生成 id_rsa 和id_rsa.pub 秘钥,生成 ...
- sql变量需要加小括号
declare @num int select top (@num) * from A --注意,使用变量来查询的时候,单个变量需要使用()
- 4.4.2 OpenGL几何变换编程实例
程序运行结果如下图: #include <GL/glut.h> #include <stdlib.h> #include <math.h> /* 初始化显示窗口大小 ...
- 【转】ORACLE SQL基础—DDL语言 礼记八目 2017-12-23 21:26:21
原文地址:https://www.toutiao.com/i6502733303550837261/ SQL语言分为:DDL数据定义语言,DML数据操纵语言,DCL是数据库控制语言,TC事务控制语言 ...
- day28 re(正则)模块
目录 re模块有什么用? re模块的基础使用 元字符 终极 贪婪模式 非贪婪模式 re模块高级 comple match和search re.split() sub和subn 分组 re模块有什么用? ...
- Selenium+Python+jenkins搭建web自动化测测试框架
python-3.6.2 chrome 59.0.3071.115 chromedriver 2.9 安装python https://www.python.org/downloads/ (Wind ...