在很多开发板中我们没办法去下载tree相关指令的支持,使用这个非常方便,可以在没有网络诞但是有linux系统

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <dirent.h>
#include <fcntl.h>
#include <errno.h>#define REGU_FILE 1
#define DIR_FILE 2typedef struct node
{struct node *next;unsigned int level;char *name;char *fullname;
}filenode;typedef struct head
{struct node *head;struct node *rear;
}headnode;int insert_sort(headnode *link_stack, filenode *new)
{filenode *next = link_stack->head;filenode *prev = NULL;while(next){if (strcmp( new->name, next->name ) > 0 ){prev = next;next = next->next;}elsebreak;}if(link_stack->head == NULL && link_stack->rear == NULL)  //the first one{link_stack->head = new;link_stack->rear = new;      }   else if(prev == NULL && next != NULL)        //insert in front of the queue{new->next = link_stack->head;link_stack->head = new;}else if( prev != NULL && next == NULL)        //insert in end of the queue.{prev->next = new;link_stack->rear = new;}else{prev->next = new;new->next = next;}
}headnode *read_dir_to_link_stack(char *dir,int level)
{DIR *dirp = NULL;if(NULL== (dirp=opendir(dir))){perror("opendir");exit(EXIT_FAILURE);}   headnode *ptr = (headnode *)malloc (sizeof (headnode));if(ptr==NULL){perror("malloc");exit(EXIT_FAILURE);}ptr->head = NULL;ptr->rear = NULL;   struct dirent *entp = NULL;while ( NULL != (entp =readdir(dirp))){if (strcmp(entp->d_name, "..")==0 || strcmp(entp->d_name, ".")==0)   //ignore ./ ../{continue;}else{filenode *temp = (filenode *)malloc(sizeof(filenode));if(temp==NULL){perror("malloc");exit(EXIT_FAILURE);}temp->next = NULL;temp->level = level;temp->name = (char *)malloc(strlen( entp->d_name) + 1);sprintf(temp->name ,"%s\0", entp->d_name);temp->fullname = (char *)malloc(strlen(dir)+1+strlen( entp->d_name) + 1);sprintf(temp->fullname,"%s/%s\0",dir,entp->d_name);insert_sort(ptr,temp);}      }closedir(dirp);return ptr;
}
/*type:1, regufile. 2 dir.
*/
void out_file_info(filenode *ptr, int type)
{int i;printf("|");for(i = 0;i < ptr->level; i++){printf("    ");}printf("|-- ");printf("%s\n",ptr->name);
}void pop_file_tree(headnode *link_stack)
{while(link_stack->head != NULL ){struct stat stat_src;if (lstat(link_stack->head->fullname, &stat_src) != 0) {fprintf(stderr, "%s(%d): stat error(%s)!\n", __FILE__, __LINE__, strerror(errno));          }   if(S_ISDIR(stat_src.st_mode)){filenode *temp = link_stack->head;link_stack->head = link_stack->head->next;if(link_stack->head == NULL)link_stack->rear ==NULL;          out_file_info(temp,DIR_FILE);dir_tree(temp->fullname,link_stack,temp->level);free(temp->name);free(temp->fullname);free(temp);}else {filenode *temp = link_stack->head;link_stack->head = link_stack->head->next;if(link_stack->head == NULL)link_stack->rear ==NULL;out_file_info(temp,REGU_FILE);free(temp->name);free(temp->fullname);free(temp);}}
}dir_tree(char *dirname,headnode *link_stack, int level)
{headnode *ret = NULL;ret = read_dir_to_link_stack(dirname, level+1);if(link_stack->head != NULL && ret->head != NULL){ret->rear->next = link_stack->head;link_stack->head = ret->head;}if(link_stack->head == NULL && ret->head != NULL )link_stack->head = ret->head;if(link_stack->rear == NULL && ret->rear != NULL)link_stack->rear = ret->rear;free(ret);pop_file_tree(link_stack);
}int main(int argc,char *argv[])
{if (argc != 2 ){fprintf(stderr,"pls useage %s dir_name\n",argv[0]);exit(EXIT_FAILURE);}struct stat stat_src;if (lstat(argv[1], &stat_src) != 0) {fprintf(stderr, "%s(%d): stat error(%s)!\n", __FILE__, __LINE__, strerror(errno));exit(EXIT_FAILURE);}  if (S_ISREG(stat_src.st_mode))      //regular file{fprintf(stderr, "%s [error opening dir]\n",argv[1]);exit(EXIT_FAILURE);}else if(S_ISDIR(stat_src.st_mode)){    headnode *link_stack = (headnode *)malloc (sizeof (headnode));if(link_stack == NULL){perror("malloc");exit(EXIT_FAILURE);}link_stack->head = NULL;link_stack->rear = NULL;printf("%s\n",argv[1]);dir_tree(argv[1], link_stack,-1);free(link_stack);}elsereturn 1;
}

环境的地方使用tree功能.

实现tree系统命令相关推荐

  1. linux中怎么卸载tree,Liunx系统命令中tree命令详解

    介绍 tree 命令英文理解为树的意思,其功能是是创建文件列表,将目录所有文件以树状的形式列出来.是一款在颜值上优先于ls的命令. linux中的tree命令默认并不会安装,下面来先看看tree安装 ...

  2. linux tree命令 树结构显示目录文件

    命令简介 tree命令的中文意思为"树",功能是以树形结构列出指定目录下的所有内容,包括所有文件.子目录及子目录里的目录和文件. 命令格式 tree [option] [direc ...

  3. Linux操作系统命令解释

    Linux操作系统命令解释 1.文件管理 cat:(concatenate)命令用于连接文件并打印到标准输出设备上 chattr命令用于改变文件属性 chgrp(change group):命令用于变 ...

  4. 运维人员必备的Linux系统命令汇总

    运维人员必备的Linux系统命令汇总 线上查询及帮助命令 文件和目录操作 查看文件及内容处理 文件压缩及解压缩 信息显示 搜索文件 用户管理 基础网络操作 深入网络操作 有关磁盘与文件系统 系统权限及 ...

  5. 01-linux系统命令整理-郭亚望

    系统命令整理 查询及帮助命令(2个) man help 文件和目录操作命令(11个) ls tree pwd mkdir cd touch cp mv rm ln find 查看文件及内容处理命令(1 ...

  6. tree老师:每天五分钟教你学命令第1期

    本文由xiao_dou友情整理 点击标题下「蓝色微信名」可快速关注 在公司工作,我们第一个应该学会的命令,就是帮助命令,在遇到一些不懂的命令的时候可以使用man命令去查看man-pages文档. ma ...

  7. Linux操作系统全解(系统命令、目录)

    Linux-笔记 学习目标 能够知道什么是Linux系统以及它的应用场景 能够独立完成安装VMware虚拟机和网络配置 能够独立完成安装CentOS以及远程终端SecureCRT 能够熟练编写账户管理 ...

  8. windows下tree命令的使用方法

    经常逛技术博客的朋友们应该见过这种项目树结构,能够清晰的列出所有的资源目录,非常直观.如果手动输入那得把人累死,起始这些都是通过命令行中的tree命令来生成的,非常简单. Linus系统和window ...

  9. 107. Binary Tree Level Order Traversal II

    题目 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from l ...

最新文章

  1. 9成P2P平台面临出局,千亿资本何去何从?
  2. LINUX学习笔记高度浓缩版之一 :用户管理、启动过程、硬盘管理
  3. python把中文转英文_Python 3.0_文本清洗之中文特殊符号转英文特殊符号及全角字符转半角字符...
  4. C# 系统应用之获取IE浏览记录和IE地址栏输入网址
  5. Oracle查看死锁 .
  6. 案例:返回固定页面的http服务器
  7. 算法训练 字符串编辑c语言
  8. 嵌入式系统系统升级内核双备份的实现方式
  9. python 全局变量、局部变量
  10. 【数据库系统】过程化和非过程化语言的相对优点
  11. JAVA SAX解析XML文档
  12. Akka之actor模型
  13. moead算法流程步骤_算法——抓住程序的灵魂
  14. 十一、接口(接口的概念,实现,继承,实现)、抽象类与抽象方法(抽象类,抽象方法概念,使用)...
  15. 翻译:RealEyes OSMF Player Sample - 第二部分:建立和配置 (转载)
  16. java 新手入门电子书_java从入门到精通第6版电子书 PDF高清版
  17. scratch课程案例——蜘蛛森林
  18. CVPR 2022 | 阿里华科提出:针对场景文本检测的视觉语言模型预训练
  19. Latex特殊符号汇集
  20. 微软亚洲研究院 可视化_如何为亚洲市场本地化手机游戏

热门文章

  1. 虚拟机和Linux系统的安装
  2. 电脑显示计算机无法显示,如果计算机无法打开怎么办?
  3. css before 文字前面竖线_前端进阶: css必知的几个底层知识和技巧
  4. 多线程内存泄漏_内存泄漏的场景和解决办法
  5. pcie和usb哪个带宽高_了解数字示波器采样率和模拟带宽的规格
  6. 2017年计算机基础知识答题宝典,2017年全国职称计算机考试答题技巧分享
  7. php是做前端还是后端,在后端准备数据还是在前端操作? - php
  8. 在保护继承中基类的共有成员_C++学习大纲:继承方式的调整
  9. 基于 Nginx 的 HTTPS 性能优化实践
  10. 集群理论详解(续一)